+++ /dev/null
-Doug Coleman
+++ /dev/null
-{
- "Æ": { "codepoints": [198], "characters": "\u00C6" },
- "Æ": { "codepoints": [198], "characters": "\u00C6" },
- "&": { "codepoints": [38], "characters": "\u0026" },
- "&": { "codepoints": [38], "characters": "\u0026" },
- "Á": { "codepoints": [193], "characters": "\u00C1" },
- "Á": { "codepoints": [193], "characters": "\u00C1" },
- "Ă": { "codepoints": [258], "characters": "\u0102" },
- "Â": { "codepoints": [194], "characters": "\u00C2" },
- "Â": { "codepoints": [194], "characters": "\u00C2" },
- "А": { "codepoints": [1040], "characters": "\u0410" },
- "𝔄": { "codepoints": [120068], "characters": "\uD835\uDD04" },
- "À": { "codepoints": [192], "characters": "\u00C0" },
- "À": { "codepoints": [192], "characters": "\u00C0" },
- "Α": { "codepoints": [913], "characters": "\u0391" },
- "Ā": { "codepoints": [256], "characters": "\u0100" },
- "⩓": { "codepoints": [10835], "characters": "\u2A53" },
- "Ą": { "codepoints": [260], "characters": "\u0104" },
- "𝔸": { "codepoints": [120120], "characters": "\uD835\uDD38" },
- "⁡": { "codepoints": [8289], "characters": "\u2061" },
- "Å": { "codepoints": [197], "characters": "\u00C5" },
- "Å": { "codepoints": [197], "characters": "\u00C5" },
- "𝒜": { "codepoints": [119964], "characters": "\uD835\uDC9C" },
- "≔": { "codepoints": [8788], "characters": "\u2254" },
- "Ã": { "codepoints": [195], "characters": "\u00C3" },
- "Ã": { "codepoints": [195], "characters": "\u00C3" },
- "Ä": { "codepoints": [196], "characters": "\u00C4" },
- "Ä": { "codepoints": [196], "characters": "\u00C4" },
- "∖": { "codepoints": [8726], "characters": "\u2216" },
- "⫧": { "codepoints": [10983], "characters": "\u2AE7" },
- "⌆": { "codepoints": [8966], "characters": "\u2306" },
- "Б": { "codepoints": [1041], "characters": "\u0411" },
- "∵": { "codepoints": [8757], "characters": "\u2235" },
- "ℬ": { "codepoints": [8492], "characters": "\u212C" },
- "Β": { "codepoints": [914], "characters": "\u0392" },
- "𝔅": { "codepoints": [120069], "characters": "\uD835\uDD05" },
- "𝔹": { "codepoints": [120121], "characters": "\uD835\uDD39" },
- "˘": { "codepoints": [728], "characters": "\u02D8" },
- "ℬ": { "codepoints": [8492], "characters": "\u212C" },
- "≎": { "codepoints": [8782], "characters": "\u224E" },
- "Ч": { "codepoints": [1063], "characters": "\u0427" },
- "©": { "codepoints": [169], "characters": "\u00A9" },
- "©": { "codepoints": [169], "characters": "\u00A9" },
- "Ć": { "codepoints": [262], "characters": "\u0106" },
- "⋒": { "codepoints": [8914], "characters": "\u22D2" },
- "ⅅ": { "codepoints": [8517], "characters": "\u2145" },
- "ℭ": { "codepoints": [8493], "characters": "\u212D" },
- "Č": { "codepoints": [268], "characters": "\u010C" },
- "Ç": { "codepoints": [199], "characters": "\u00C7" },
- "Ç": { "codepoints": [199], "characters": "\u00C7" },
- "Ĉ": { "codepoints": [264], "characters": "\u0108" },
- "∰": { "codepoints": [8752], "characters": "\u2230" },
- "Ċ": { "codepoints": [266], "characters": "\u010A" },
- "¸": { "codepoints": [184], "characters": "\u00B8" },
- "·": { "codepoints": [183], "characters": "\u00B7" },
- "ℭ": { "codepoints": [8493], "characters": "\u212D" },
- "Χ": { "codepoints": [935], "characters": "\u03A7" },
- "⊙": { "codepoints": [8857], "characters": "\u2299" },
- "⊖": { "codepoints": [8854], "characters": "\u2296" },
- "⊕": { "codepoints": [8853], "characters": "\u2295" },
- "⊗": { "codepoints": [8855], "characters": "\u2297" },
- "∲": { "codepoints": [8754], "characters": "\u2232" },
- "”": { "codepoints": [8221], "characters": "\u201D" },
- "’": { "codepoints": [8217], "characters": "\u2019" },
- "∷": { "codepoints": [8759], "characters": "\u2237" },
- "⩴": { "codepoints": [10868], "characters": "\u2A74" },
- "≡": { "codepoints": [8801], "characters": "\u2261" },
- "∯": { "codepoints": [8751], "characters": "\u222F" },
- "∮": { "codepoints": [8750], "characters": "\u222E" },
- "ℂ": { "codepoints": [8450], "characters": "\u2102" },
- "∐": { "codepoints": [8720], "characters": "\u2210" },
- "∳": { "codepoints": [8755], "characters": "\u2233" },
- "⨯": { "codepoints": [10799], "characters": "\u2A2F" },
- "𝒞": { "codepoints": [119966], "characters": "\uD835\uDC9E" },
- "⋓": { "codepoints": [8915], "characters": "\u22D3" },
- "≍": { "codepoints": [8781], "characters": "\u224D" },
- "ⅅ": { "codepoints": [8517], "characters": "\u2145" },
- "⤑": { "codepoints": [10513], "characters": "\u2911" },
- "Ђ": { "codepoints": [1026], "characters": "\u0402" },
- "Ѕ": { "codepoints": [1029], "characters": "\u0405" },
- "Џ": { "codepoints": [1039], "characters": "\u040F" },
- "‡": { "codepoints": [8225], "characters": "\u2021" },
- "↡": { "codepoints": [8609], "characters": "\u21A1" },
- "⫤": { "codepoints": [10980], "characters": "\u2AE4" },
- "Ď": { "codepoints": [270], "characters": "\u010E" },
- "Д": { "codepoints": [1044], "characters": "\u0414" },
- "∇": { "codepoints": [8711], "characters": "\u2207" },
- "Δ": { "codepoints": [916], "characters": "\u0394" },
- "𝔇": { "codepoints": [120071], "characters": "\uD835\uDD07" },
- "´": { "codepoints": [180], "characters": "\u00B4" },
- "˙": { "codepoints": [729], "characters": "\u02D9" },
- "˝": { "codepoints": [733], "characters": "\u02DD" },
- "`": { "codepoints": [96], "characters": "\u0060" },
- "˜": { "codepoints": [732], "characters": "\u02DC" },
- "⋄": { "codepoints": [8900], "characters": "\u22C4" },
- "ⅆ": { "codepoints": [8518], "characters": "\u2146" },
- "𝔻": { "codepoints": [120123], "characters": "\uD835\uDD3B" },
- "¨": { "codepoints": [168], "characters": "\u00A8" },
- "⃜": { "codepoints": [8412], "characters": "\u20DC" },
- "≐": { "codepoints": [8784], "characters": "\u2250" },
- "∯": { "codepoints": [8751], "characters": "\u222F" },
- "¨": { "codepoints": [168], "characters": "\u00A8" },
- "⇓": { "codepoints": [8659], "characters": "\u21D3" },
- "⇐": { "codepoints": [8656], "characters": "\u21D0" },
- "⇔": { "codepoints": [8660], "characters": "\u21D4" },
- "⫤": { "codepoints": [10980], "characters": "\u2AE4" },
- "⟸": { "codepoints": [10232], "characters": "\u27F8" },
- "⟺": { "codepoints": [10234], "characters": "\u27FA" },
- "⟹": { "codepoints": [10233], "characters": "\u27F9" },
- "⇒": { "codepoints": [8658], "characters": "\u21D2" },
- "⊨": { "codepoints": [8872], "characters": "\u22A8" },
- "⇑": { "codepoints": [8657], "characters": "\u21D1" },
- "⇕": { "codepoints": [8661], "characters": "\u21D5" },
- "∥": { "codepoints": [8741], "characters": "\u2225" },
- "↓": { "codepoints": [8595], "characters": "\u2193" },
- "⤓": { "codepoints": [10515], "characters": "\u2913" },
- "⇵": { "codepoints": [8693], "characters": "\u21F5" },
- "̑": { "codepoints": [785], "characters": "\u0311" },
- "⥐": { "codepoints": [10576], "characters": "\u2950" },
- "⥞": { "codepoints": [10590], "characters": "\u295E" },
- "↽": { "codepoints": [8637], "characters": "\u21BD" },
- "⥖": { "codepoints": [10582], "characters": "\u2956" },
- "⥟": { "codepoints": [10591], "characters": "\u295F" },
- "⇁": { "codepoints": [8641], "characters": "\u21C1" },
- "⥗": { "codepoints": [10583], "characters": "\u2957" },
- "⊤": { "codepoints": [8868], "characters": "\u22A4" },
- "↧": { "codepoints": [8615], "characters": "\u21A7" },
- "⇓": { "codepoints": [8659], "characters": "\u21D3" },
- "𝒟": { "codepoints": [119967], "characters": "\uD835\uDC9F" },
- "Đ": { "codepoints": [272], "characters": "\u0110" },
- "Ŋ": { "codepoints": [330], "characters": "\u014A" },
- "Ð": { "codepoints": [208], "characters": "\u00D0" },
- "Ð": { "codepoints": [208], "characters": "\u00D0" },
- "É": { "codepoints": [201], "characters": "\u00C9" },
- "É": { "codepoints": [201], "characters": "\u00C9" },
- "Ě": { "codepoints": [282], "characters": "\u011A" },
- "Ê": { "codepoints": [202], "characters": "\u00CA" },
- "Ê": { "codepoints": [202], "characters": "\u00CA" },
- "Э": { "codepoints": [1069], "characters": "\u042D" },
- "Ė": { "codepoints": [278], "characters": "\u0116" },
- "𝔈": { "codepoints": [120072], "characters": "\uD835\uDD08" },
- "È": { "codepoints": [200], "characters": "\u00C8" },
- "È": { "codepoints": [200], "characters": "\u00C8" },
- "∈": { "codepoints": [8712], "characters": "\u2208" },
- "Ē": { "codepoints": [274], "characters": "\u0112" },
- "◻": { "codepoints": [9723], "characters": "\u25FB" },
- "▫": { "codepoints": [9643], "characters": "\u25AB" },
- "Ę": { "codepoints": [280], "characters": "\u0118" },
- "𝔼": { "codepoints": [120124], "characters": "\uD835\uDD3C" },
- "Ε": { "codepoints": [917], "characters": "\u0395" },
- "⩵": { "codepoints": [10869], "characters": "\u2A75" },
- "≂": { "codepoints": [8770], "characters": "\u2242" },
- "⇌": { "codepoints": [8652], "characters": "\u21CC" },
- "ℰ": { "codepoints": [8496], "characters": "\u2130" },
- "⩳": { "codepoints": [10867], "characters": "\u2A73" },
- "Η": { "codepoints": [919], "characters": "\u0397" },
- "Ë": { "codepoints": [203], "characters": "\u00CB" },
- "Ë": { "codepoints": [203], "characters": "\u00CB" },
- "∃": { "codepoints": [8707], "characters": "\u2203" },
- "ⅇ": { "codepoints": [8519], "characters": "\u2147" },
- "Ф": { "codepoints": [1060], "characters": "\u0424" },
- "𝔉": { "codepoints": [120073], "characters": "\uD835\uDD09" },
- "◼": { "codepoints": [9724], "characters": "\u25FC" },
- "▪": { "codepoints": [9642], "characters": "\u25AA" },
- "𝔽": { "codepoints": [120125], "characters": "\uD835\uDD3D" },
- "∀": { "codepoints": [8704], "characters": "\u2200" },
- "ℱ": { "codepoints": [8497], "characters": "\u2131" },
- "ℱ": { "codepoints": [8497], "characters": "\u2131" },
- "Ѓ": { "codepoints": [1027], "characters": "\u0403" },
- ">": { "codepoints": [62], "characters": "\u003E" },
- ">": { "codepoints": [62], "characters": "\u003E" },
- "Γ": { "codepoints": [915], "characters": "\u0393" },
- "Ϝ": { "codepoints": [988], "characters": "\u03DC" },
- "Ğ": { "codepoints": [286], "characters": "\u011E" },
- "Ģ": { "codepoints": [290], "characters": "\u0122" },
- "Ĝ": { "codepoints": [284], "characters": "\u011C" },
- "Г": { "codepoints": [1043], "characters": "\u0413" },
- "Ġ": { "codepoints": [288], "characters": "\u0120" },
- "𝔊": { "codepoints": [120074], "characters": "\uD835\uDD0A" },
- "⋙": { "codepoints": [8921], "characters": "\u22D9" },
- "𝔾": { "codepoints": [120126], "characters": "\uD835\uDD3E" },
- "≥": { "codepoints": [8805], "characters": "\u2265" },
- "⋛": { "codepoints": [8923], "characters": "\u22DB" },
- "≧": { "codepoints": [8807], "characters": "\u2267" },
- "⪢": { "codepoints": [10914], "characters": "\u2AA2" },
- "≷": { "codepoints": [8823], "characters": "\u2277" },
- "⩾": { "codepoints": [10878], "characters": "\u2A7E" },
- "≳": { "codepoints": [8819], "characters": "\u2273" },
- "𝒢": { "codepoints": [119970], "characters": "\uD835\uDCA2" },
- "≫": { "codepoints": [8811], "characters": "\u226B" },
- "Ъ": { "codepoints": [1066], "characters": "\u042A" },
- "ˇ": { "codepoints": [711], "characters": "\u02C7" },
- "^": { "codepoints": [94], "characters": "\u005E" },
- "Ĥ": { "codepoints": [292], "characters": "\u0124" },
- "ℌ": { "codepoints": [8460], "characters": "\u210C" },
- "ℋ": { "codepoints": [8459], "characters": "\u210B" },
- "ℍ": { "codepoints": [8461], "characters": "\u210D" },
- "─": { "codepoints": [9472], "characters": "\u2500" },
- "ℋ": { "codepoints": [8459], "characters": "\u210B" },
- "Ħ": { "codepoints": [294], "characters": "\u0126" },
- "≎": { "codepoints": [8782], "characters": "\u224E" },
- "≏": { "codepoints": [8783], "characters": "\u224F" },
- "Е": { "codepoints": [1045], "characters": "\u0415" },
- "IJ": { "codepoints": [306], "characters": "\u0132" },
- "Ё": { "codepoints": [1025], "characters": "\u0401" },
- "Í": { "codepoints": [205], "characters": "\u00CD" },
- "Í": { "codepoints": [205], "characters": "\u00CD" },
- "Î": { "codepoints": [206], "characters": "\u00CE" },
- "Î": { "codepoints": [206], "characters": "\u00CE" },
- "И": { "codepoints": [1048], "characters": "\u0418" },
- "İ": { "codepoints": [304], "characters": "\u0130" },
- "ℑ": { "codepoints": [8465], "characters": "\u2111" },
- "Ì": { "codepoints": [204], "characters": "\u00CC" },
- "Ì": { "codepoints": [204], "characters": "\u00CC" },
- "ℑ": { "codepoints": [8465], "characters": "\u2111" },
- "Ī": { "codepoints": [298], "characters": "\u012A" },
- "ⅈ": { "codepoints": [8520], "characters": "\u2148" },
- "⇒": { "codepoints": [8658], "characters": "\u21D2" },
- "∬": { "codepoints": [8748], "characters": "\u222C" },
- "∫": { "codepoints": [8747], "characters": "\u222B" },
- "⋂": { "codepoints": [8898], "characters": "\u22C2" },
- "⁣": { "codepoints": [8291], "characters": "\u2063" },
- "⁢": { "codepoints": [8290], "characters": "\u2062" },
- "Į": { "codepoints": [302], "characters": "\u012E" },
- "𝕀": { "codepoints": [120128], "characters": "\uD835\uDD40" },
- "Ι": { "codepoints": [921], "characters": "\u0399" },
- "ℐ": { "codepoints": [8464], "characters": "\u2110" },
- "Ĩ": { "codepoints": [296], "characters": "\u0128" },
- "І": { "codepoints": [1030], "characters": "\u0406" },
- "Ï": { "codepoints": [207], "characters": "\u00CF" },
- "Ï": { "codepoints": [207], "characters": "\u00CF" },
- "Ĵ": { "codepoints": [308], "characters": "\u0134" },
- "Й": { "codepoints": [1049], "characters": "\u0419" },
- "𝔍": { "codepoints": [120077], "characters": "\uD835\uDD0D" },
- "𝕁": { "codepoints": [120129], "characters": "\uD835\uDD41" },
- "𝒥": { "codepoints": [119973], "characters": "\uD835\uDCA5" },
- "Ј": { "codepoints": [1032], "characters": "\u0408" },
- "Є": { "codepoints": [1028], "characters": "\u0404" },
- "Х": { "codepoints": [1061], "characters": "\u0425" },
- "Ќ": { "codepoints": [1036], "characters": "\u040C" },
- "Κ": { "codepoints": [922], "characters": "\u039A" },
- "Ķ": { "codepoints": [310], "characters": "\u0136" },
- "К": { "codepoints": [1050], "characters": "\u041A" },
- "𝔎": { "codepoints": [120078], "characters": "\uD835\uDD0E" },
- "𝕂": { "codepoints": [120130], "characters": "\uD835\uDD42" },
- "𝒦": { "codepoints": [119974], "characters": "\uD835\uDCA6" },
- "Љ": { "codepoints": [1033], "characters": "\u0409" },
- "<": { "codepoints": [60], "characters": "\u003C" },
- "<": { "codepoints": [60], "characters": "\u003C" },
- "Ĺ": { "codepoints": [313], "characters": "\u0139" },
- "Λ": { "codepoints": [923], "characters": "\u039B" },
- "⟪": { "codepoints": [10218], "characters": "\u27EA" },
- "ℒ": { "codepoints": [8466], "characters": "\u2112" },
- "↞": { "codepoints": [8606], "characters": "\u219E" },
- "Ľ": { "codepoints": [317], "characters": "\u013D" },
- "Ļ": { "codepoints": [315], "characters": "\u013B" },
- "Л": { "codepoints": [1051], "characters": "\u041B" },
- "⟨": { "codepoints": [10216], "characters": "\u27E8" },
- "←": { "codepoints": [8592], "characters": "\u2190" },
- "⇤": { "codepoints": [8676], "characters": "\u21E4" },
- "⇆": { "codepoints": [8646], "characters": "\u21C6" },
- "⌈": { "codepoints": [8968], "characters": "\u2308" },
- "⟦": { "codepoints": [10214], "characters": "\u27E6" },
- "⥡": { "codepoints": [10593], "characters": "\u2961" },
- "⇃": { "codepoints": [8643], "characters": "\u21C3" },
- "⥙": { "codepoints": [10585], "characters": "\u2959" },
- "⌊": { "codepoints": [8970], "characters": "\u230A" },
- "↔": { "codepoints": [8596], "characters": "\u2194" },
- "⥎": { "codepoints": [10574], "characters": "\u294E" },
- "⊣": { "codepoints": [8867], "characters": "\u22A3" },
- "↤": { "codepoints": [8612], "characters": "\u21A4" },
- "⥚": { "codepoints": [10586], "characters": "\u295A" },
- "⊲": { "codepoints": [8882], "characters": "\u22B2" },
- "⧏": { "codepoints": [10703], "characters": "\u29CF" },
- "⊴": { "codepoints": [8884], "characters": "\u22B4" },
- "⥑": { "codepoints": [10577], "characters": "\u2951" },
- "⥠": { "codepoints": [10592], "characters": "\u2960" },
- "↿": { "codepoints": [8639], "characters": "\u21BF" },
- "⥘": { "codepoints": [10584], "characters": "\u2958" },
- "↼": { "codepoints": [8636], "characters": "\u21BC" },
- "⥒": { "codepoints": [10578], "characters": "\u2952" },
- "⇐": { "codepoints": [8656], "characters": "\u21D0" },
- "⇔": { "codepoints": [8660], "characters": "\u21D4" },
- "⋚": { "codepoints": [8922], "characters": "\u22DA" },
- "≦": { "codepoints": [8806], "characters": "\u2266" },
- "≶": { "codepoints": [8822], "characters": "\u2276" },
- "⪡": { "codepoints": [10913], "characters": "\u2AA1" },
- "⩽": { "codepoints": [10877], "characters": "\u2A7D" },
- "≲": { "codepoints": [8818], "characters": "\u2272" },
- "𝔏": { "codepoints": [120079], "characters": "\uD835\uDD0F" },
- "⋘": { "codepoints": [8920], "characters": "\u22D8" },
- "⇚": { "codepoints": [8666], "characters": "\u21DA" },
- "Ŀ": { "codepoints": [319], "characters": "\u013F" },
- "⟵": { "codepoints": [10229], "characters": "\u27F5" },
- "⟷": { "codepoints": [10231], "characters": "\u27F7" },
- "⟶": { "codepoints": [10230], "characters": "\u27F6" },
- "⟸": { "codepoints": [10232], "characters": "\u27F8" },
- "⟺": { "codepoints": [10234], "characters": "\u27FA" },
- "⟹": { "codepoints": [10233], "characters": "\u27F9" },
- "𝕃": { "codepoints": [120131], "characters": "\uD835\uDD43" },
- "↙": { "codepoints": [8601], "characters": "\u2199" },
- "↘": { "codepoints": [8600], "characters": "\u2198" },
- "ℒ": { "codepoints": [8466], "characters": "\u2112" },
- "↰": { "codepoints": [8624], "characters": "\u21B0" },
- "Ł": { "codepoints": [321], "characters": "\u0141" },
- "≪": { "codepoints": [8810], "characters": "\u226A" },
- "⤅": { "codepoints": [10501], "characters": "\u2905" },
- "М": { "codepoints": [1052], "characters": "\u041C" },
- " ": { "codepoints": [8287], "characters": "\u205F" },
- "ℳ": { "codepoints": [8499], "characters": "\u2133" },
- "𝔐": { "codepoints": [120080], "characters": "\uD835\uDD10" },
- "∓": { "codepoints": [8723], "characters": "\u2213" },
- "𝕄": { "codepoints": [120132], "characters": "\uD835\uDD44" },
- "ℳ": { "codepoints": [8499], "characters": "\u2133" },
- "Μ": { "codepoints": [924], "characters": "\u039C" },
- "Њ": { "codepoints": [1034], "characters": "\u040A" },
- "Ń": { "codepoints": [323], "characters": "\u0143" },
- "Ň": { "codepoints": [327], "characters": "\u0147" },
- "Ņ": { "codepoints": [325], "characters": "\u0145" },
- "Н": { "codepoints": [1053], "characters": "\u041D" },
- "​": { "codepoints": [8203], "characters": "\u200B" },
- "​": { "codepoints": [8203], "characters": "\u200B" },
- "​": { "codepoints": [8203], "characters": "\u200B" },
- "​": { "codepoints": [8203], "characters": "\u200B" },
- "≫": { "codepoints": [8811], "characters": "\u226B" },
- "≪": { "codepoints": [8810], "characters": "\u226A" },
- "
": { "codepoints": [10], "characters": "\u000A" },
- "𝔑": { "codepoints": [120081], "characters": "\uD835\uDD11" },
- "⁠": { "codepoints": [8288], "characters": "\u2060" },
- " ": { "codepoints": [160], "characters": "\u00A0" },
- "ℕ": { "codepoints": [8469], "characters": "\u2115" },
- "⫬": { "codepoints": [10988], "characters": "\u2AEC" },
- "≢": { "codepoints": [8802], "characters": "\u2262" },
- "≭": { "codepoints": [8813], "characters": "\u226D" },
- "∦": { "codepoints": [8742], "characters": "\u2226" },
- "∉": { "codepoints": [8713], "characters": "\u2209" },
- "≠": { "codepoints": [8800], "characters": "\u2260" },
- "≂̸": { "codepoints": [8770, 824], "characters": "\u2242\u0338" },
- "∄": { "codepoints": [8708], "characters": "\u2204" },
- "≯": { "codepoints": [8815], "characters": "\u226F" },
- "≱": { "codepoints": [8817], "characters": "\u2271" },
- "≧̸": { "codepoints": [8807, 824], "characters": "\u2267\u0338" },
- "≫̸": { "codepoints": [8811, 824], "characters": "\u226B\u0338" },
- "≹": { "codepoints": [8825], "characters": "\u2279" },
- "⩾̸": { "codepoints": [10878, 824], "characters": "\u2A7E\u0338" },
- "≵": { "codepoints": [8821], "characters": "\u2275" },
- "≎̸": { "codepoints": [8782, 824], "characters": "\u224E\u0338" },
- "≏̸": { "codepoints": [8783, 824], "characters": "\u224F\u0338" },
- "⋪": { "codepoints": [8938], "characters": "\u22EA" },
- "⧏̸": { "codepoints": [10703, 824], "characters": "\u29CF\u0338" },
- "⋬": { "codepoints": [8940], "characters": "\u22EC" },
- "≮": { "codepoints": [8814], "characters": "\u226E" },
- "≰": { "codepoints": [8816], "characters": "\u2270" },
- "≸": { "codepoints": [8824], "characters": "\u2278" },
- "≪̸": { "codepoints": [8810, 824], "characters": "\u226A\u0338" },
- "⩽̸": { "codepoints": [10877, 824], "characters": "\u2A7D\u0338" },
- "≴": { "codepoints": [8820], "characters": "\u2274" },
- "⪢̸": { "codepoints": [10914, 824], "characters": "\u2AA2\u0338" },
- "⪡̸": { "codepoints": [10913, 824], "characters": "\u2AA1\u0338" },
- "⊀": { "codepoints": [8832], "characters": "\u2280" },
- "⪯̸": { "codepoints": [10927, 824], "characters": "\u2AAF\u0338" },
- "⋠": { "codepoints": [8928], "characters": "\u22E0" },
- "∌": { "codepoints": [8716], "characters": "\u220C" },
- "⋫": { "codepoints": [8939], "characters": "\u22EB" },
- "⧐̸": { "codepoints": [10704, 824], "characters": "\u29D0\u0338" },
- "⋭": { "codepoints": [8941], "characters": "\u22ED" },
- "⊏̸": { "codepoints": [8847, 824], "characters": "\u228F\u0338" },
- "⋢": { "codepoints": [8930], "characters": "\u22E2" },
- "⊐̸": { "codepoints": [8848, 824], "characters": "\u2290\u0338" },
- "⋣": { "codepoints": [8931], "characters": "\u22E3" },
- "⊂⃒": { "codepoints": [8834, 8402], "characters": "\u2282\u20D2" },
- "⊈": { "codepoints": [8840], "characters": "\u2288" },
- "⊁": { "codepoints": [8833], "characters": "\u2281" },
- "⪰̸": { "codepoints": [10928, 824], "characters": "\u2AB0\u0338" },
- "⋡": { "codepoints": [8929], "characters": "\u22E1" },
- "≿̸": { "codepoints": [8831, 824], "characters": "\u227F\u0338" },
- "⊃⃒": { "codepoints": [8835, 8402], "characters": "\u2283\u20D2" },
- "⊉": { "codepoints": [8841], "characters": "\u2289" },
- "≁": { "codepoints": [8769], "characters": "\u2241" },
- "≄": { "codepoints": [8772], "characters": "\u2244" },
- "≇": { "codepoints": [8775], "characters": "\u2247" },
- "≉": { "codepoints": [8777], "characters": "\u2249" },
- "∤": { "codepoints": [8740], "characters": "\u2224" },
- "𝒩": { "codepoints": [119977], "characters": "\uD835\uDCA9" },
- "Ñ": { "codepoints": [209], "characters": "\u00D1" },
- "Ñ": { "codepoints": [209], "characters": "\u00D1" },
- "Ν": { "codepoints": [925], "characters": "\u039D" },
- "Œ": { "codepoints": [338], "characters": "\u0152" },
- "Ó": { "codepoints": [211], "characters": "\u00D3" },
- "Ó": { "codepoints": [211], "characters": "\u00D3" },
- "Ô": { "codepoints": [212], "characters": "\u00D4" },
- "Ô": { "codepoints": [212], "characters": "\u00D4" },
- "О": { "codepoints": [1054], "characters": "\u041E" },
- "Ő": { "codepoints": [336], "characters": "\u0150" },
- "𝔒": { "codepoints": [120082], "characters": "\uD835\uDD12" },
- "Ò": { "codepoints": [210], "characters": "\u00D2" },
- "Ò": { "codepoints": [210], "characters": "\u00D2" },
- "Ō": { "codepoints": [332], "characters": "\u014C" },
- "Ω": { "codepoints": [937], "characters": "\u03A9" },
- "Ο": { "codepoints": [927], "characters": "\u039F" },
- "𝕆": { "codepoints": [120134], "characters": "\uD835\uDD46" },
- "“": { "codepoints": [8220], "characters": "\u201C" },
- "‘": { "codepoints": [8216], "characters": "\u2018" },
- "⩔": { "codepoints": [10836], "characters": "\u2A54" },
- "𝒪": { "codepoints": [119978], "characters": "\uD835\uDCAA" },
- "Ø": { "codepoints": [216], "characters": "\u00D8" },
- "Ø": { "codepoints": [216], "characters": "\u00D8" },
- "Õ": { "codepoints": [213], "characters": "\u00D5" },
- "Õ": { "codepoints": [213], "characters": "\u00D5" },
- "⨷": { "codepoints": [10807], "characters": "\u2A37" },
- "Ö": { "codepoints": [214], "characters": "\u00D6" },
- "Ö": { "codepoints": [214], "characters": "\u00D6" },
- "‾": { "codepoints": [8254], "characters": "\u203E" },
- "⏞": { "codepoints": [9182], "characters": "\u23DE" },
- "⎴": { "codepoints": [9140], "characters": "\u23B4" },
- "⏜": { "codepoints": [9180], "characters": "\u23DC" },
- "∂": { "codepoints": [8706], "characters": "\u2202" },
- "П": { "codepoints": [1055], "characters": "\u041F" },
- "𝔓": { "codepoints": [120083], "characters": "\uD835\uDD13" },
- "Φ": { "codepoints": [934], "characters": "\u03A6" },
- "Π": { "codepoints": [928], "characters": "\u03A0" },
- "±": { "codepoints": [177], "characters": "\u00B1" },
- "ℌ": { "codepoints": [8460], "characters": "\u210C" },
- "ℙ": { "codepoints": [8473], "characters": "\u2119" },
- "⪻": { "codepoints": [10939], "characters": "\u2ABB" },
- "≺": { "codepoints": [8826], "characters": "\u227A" },
- "⪯": { "codepoints": [10927], "characters": "\u2AAF" },
- "≼": { "codepoints": [8828], "characters": "\u227C" },
- "≾": { "codepoints": [8830], "characters": "\u227E" },
- "″": { "codepoints": [8243], "characters": "\u2033" },
- "∏": { "codepoints": [8719], "characters": "\u220F" },
- "∷": { "codepoints": [8759], "characters": "\u2237" },
- "∝": { "codepoints": [8733], "characters": "\u221D" },
- "𝒫": { "codepoints": [119979], "characters": "\uD835\uDCAB" },
- "Ψ": { "codepoints": [936], "characters": "\u03A8" },
- """: { "codepoints": [34], "characters": "\u0022" },
- """: { "codepoints": [34], "characters": "\u0022" },
- "𝔔": { "codepoints": [120084], "characters": "\uD835\uDD14" },
- "ℚ": { "codepoints": [8474], "characters": "\u211A" },
- "𝒬": { "codepoints": [119980], "characters": "\uD835\uDCAC" },
- "⤐": { "codepoints": [10512], "characters": "\u2910" },
- "®": { "codepoints": [174], "characters": "\u00AE" },
- "®": { "codepoints": [174], "characters": "\u00AE" },
- "Ŕ": { "codepoints": [340], "characters": "\u0154" },
- "⟫": { "codepoints": [10219], "characters": "\u27EB" },
- "↠": { "codepoints": [8608], "characters": "\u21A0" },
- "⤖": { "codepoints": [10518], "characters": "\u2916" },
- "Ř": { "codepoints": [344], "characters": "\u0158" },
- "Ŗ": { "codepoints": [342], "characters": "\u0156" },
- "Р": { "codepoints": [1056], "characters": "\u0420" },
- "ℜ": { "codepoints": [8476], "characters": "\u211C" },
- "∋": { "codepoints": [8715], "characters": "\u220B" },
- "⇋": { "codepoints": [8651], "characters": "\u21CB" },
- "⥯": { "codepoints": [10607], "characters": "\u296F" },
- "ℜ": { "codepoints": [8476], "characters": "\u211C" },
- "Ρ": { "codepoints": [929], "characters": "\u03A1" },
- "⟩": { "codepoints": [10217], "characters": "\u27E9" },
- "→": { "codepoints": [8594], "characters": "\u2192" },
- "⇥": { "codepoints": [8677], "characters": "\u21E5" },
- "⇄": { "codepoints": [8644], "characters": "\u21C4" },
- "⌉": { "codepoints": [8969], "characters": "\u2309" },
- "⟧": { "codepoints": [10215], "characters": "\u27E7" },
- "⥝": { "codepoints": [10589], "characters": "\u295D" },
- "⇂": { "codepoints": [8642], "characters": "\u21C2" },
- "⥕": { "codepoints": [10581], "characters": "\u2955" },
- "⌋": { "codepoints": [8971], "characters": "\u230B" },
- "⊢": { "codepoints": [8866], "characters": "\u22A2" },
- "↦": { "codepoints": [8614], "characters": "\u21A6" },
- "⥛": { "codepoints": [10587], "characters": "\u295B" },
- "⊳": { "codepoints": [8883], "characters": "\u22B3" },
- "⧐": { "codepoints": [10704], "characters": "\u29D0" },
- "⊵": { "codepoints": [8885], "characters": "\u22B5" },
- "⥏": { "codepoints": [10575], "characters": "\u294F" },
- "⥜": { "codepoints": [10588], "characters": "\u295C" },
- "↾": { "codepoints": [8638], "characters": "\u21BE" },
- "⥔": { "codepoints": [10580], "characters": "\u2954" },
- "⇀": { "codepoints": [8640], "characters": "\u21C0" },
- "⥓": { "codepoints": [10579], "characters": "\u2953" },
- "⇒": { "codepoints": [8658], "characters": "\u21D2" },
- "ℝ": { "codepoints": [8477], "characters": "\u211D" },
- "⥰": { "codepoints": [10608], "characters": "\u2970" },
- "⇛": { "codepoints": [8667], "characters": "\u21DB" },
- "ℛ": { "codepoints": [8475], "characters": "\u211B" },
- "↱": { "codepoints": [8625], "characters": "\u21B1" },
- "⧴": { "codepoints": [10740], "characters": "\u29F4" },
- "Щ": { "codepoints": [1065], "characters": "\u0429" },
- "Ш": { "codepoints": [1064], "characters": "\u0428" },
- "Ь": { "codepoints": [1068], "characters": "\u042C" },
- "Ś": { "codepoints": [346], "characters": "\u015A" },
- "⪼": { "codepoints": [10940], "characters": "\u2ABC" },
- "Š": { "codepoints": [352], "characters": "\u0160" },
- "Ş": { "codepoints": [350], "characters": "\u015E" },
- "Ŝ": { "codepoints": [348], "characters": "\u015C" },
- "С": { "codepoints": [1057], "characters": "\u0421" },
- "𝔖": { "codepoints": [120086], "characters": "\uD835\uDD16" },
- "↓": { "codepoints": [8595], "characters": "\u2193" },
- "←": { "codepoints": [8592], "characters": "\u2190" },
- "→": { "codepoints": [8594], "characters": "\u2192" },
- "↑": { "codepoints": [8593], "characters": "\u2191" },
- "Σ": { "codepoints": [931], "characters": "\u03A3" },
- "∘": { "codepoints": [8728], "characters": "\u2218" },
- "𝕊": { "codepoints": [120138], "characters": "\uD835\uDD4A" },
- "√": { "codepoints": [8730], "characters": "\u221A" },
- "□": { "codepoints": [9633], "characters": "\u25A1" },
- "⊓": { "codepoints": [8851], "characters": "\u2293" },
- "⊏": { "codepoints": [8847], "characters": "\u228F" },
- "⊑": { "codepoints": [8849], "characters": "\u2291" },
- "⊐": { "codepoints": [8848], "characters": "\u2290" },
- "⊒": { "codepoints": [8850], "characters": "\u2292" },
- "⊔": { "codepoints": [8852], "characters": "\u2294" },
- "𝒮": { "codepoints": [119982], "characters": "\uD835\uDCAE" },
- "⋆": { "codepoints": [8902], "characters": "\u22C6" },
- "⋐": { "codepoints": [8912], "characters": "\u22D0" },
- "⋐": { "codepoints": [8912], "characters": "\u22D0" },
- "⊆": { "codepoints": [8838], "characters": "\u2286" },
- "≻": { "codepoints": [8827], "characters": "\u227B" },
- "⪰": { "codepoints": [10928], "characters": "\u2AB0" },
- "≽": { "codepoints": [8829], "characters": "\u227D" },
- "≿": { "codepoints": [8831], "characters": "\u227F" },
- "∋": { "codepoints": [8715], "characters": "\u220B" },
- "∑": { "codepoints": [8721], "characters": "\u2211" },
- "⋑": { "codepoints": [8913], "characters": "\u22D1" },
- "⊃": { "codepoints": [8835], "characters": "\u2283" },
- "⊇": { "codepoints": [8839], "characters": "\u2287" },
- "⋑": { "codepoints": [8913], "characters": "\u22D1" },
- "Þ": { "codepoints": [222], "characters": "\u00DE" },
- "Þ": { "codepoints": [222], "characters": "\u00DE" },
- "™": { "codepoints": [8482], "characters": "\u2122" },
- "Ћ": { "codepoints": [1035], "characters": "\u040B" },
- "Ц": { "codepoints": [1062], "characters": "\u0426" },
- "	": { "codepoints": [9], "characters": "\u0009" },
- "Τ": { "codepoints": [932], "characters": "\u03A4" },
- "Ť": { "codepoints": [356], "characters": "\u0164" },
- "Ţ": { "codepoints": [354], "characters": "\u0162" },
- "Т": { "codepoints": [1058], "characters": "\u0422" },
- "𝔗": { "codepoints": [120087], "characters": "\uD835\uDD17" },
- "∴": { "codepoints": [8756], "characters": "\u2234" },
- "Θ": { "codepoints": [920], "characters": "\u0398" },
- "  ": { "codepoints": [8287, 8202], "characters": "\u205F\u200A" },
- " ": { "codepoints": [8201], "characters": "\u2009" },
- "∼": { "codepoints": [8764], "characters": "\u223C" },
- "≃": { "codepoints": [8771], "characters": "\u2243" },
- "≅": { "codepoints": [8773], "characters": "\u2245" },
- "≈": { "codepoints": [8776], "characters": "\u2248" },
- "𝕋": { "codepoints": [120139], "characters": "\uD835\uDD4B" },
- "⃛": { "codepoints": [8411], "characters": "\u20DB" },
- "𝒯": { "codepoints": [119983], "characters": "\uD835\uDCAF" },
- "Ŧ": { "codepoints": [358], "characters": "\u0166" },
- "Ú": { "codepoints": [218], "characters": "\u00DA" },
- "Ú": { "codepoints": [218], "characters": "\u00DA" },
- "↟": { "codepoints": [8607], "characters": "\u219F" },
- "⥉": { "codepoints": [10569], "characters": "\u2949" },
- "Ў": { "codepoints": [1038], "characters": "\u040E" },
- "Ŭ": { "codepoints": [364], "characters": "\u016C" },
- "Û": { "codepoints": [219], "characters": "\u00DB" },
- "Û": { "codepoints": [219], "characters": "\u00DB" },
- "У": { "codepoints": [1059], "characters": "\u0423" },
- "Ű": { "codepoints": [368], "characters": "\u0170" },
- "𝔘": { "codepoints": [120088], "characters": "\uD835\uDD18" },
- "Ù": { "codepoints": [217], "characters": "\u00D9" },
- "Ù": { "codepoints": [217], "characters": "\u00D9" },
- "Ū": { "codepoints": [362], "characters": "\u016A" },
- "_": { "codepoints": [95], "characters": "\u005F" },
- "⏟": { "codepoints": [9183], "characters": "\u23DF" },
- "⎵": { "codepoints": [9141], "characters": "\u23B5" },
- "⏝": { "codepoints": [9181], "characters": "\u23DD" },
- "⋃": { "codepoints": [8899], "characters": "\u22C3" },
- "⊎": { "codepoints": [8846], "characters": "\u228E" },
- "Ų": { "codepoints": [370], "characters": "\u0172" },
- "𝕌": { "codepoints": [120140], "characters": "\uD835\uDD4C" },
- "↑": { "codepoints": [8593], "characters": "\u2191" },
- "⤒": { "codepoints": [10514], "characters": "\u2912" },
- "⇅": { "codepoints": [8645], "characters": "\u21C5" },
- "↕": { "codepoints": [8597], "characters": "\u2195" },
- "⥮": { "codepoints": [10606], "characters": "\u296E" },
- "⊥": { "codepoints": [8869], "characters": "\u22A5" },
- "↥": { "codepoints": [8613], "characters": "\u21A5" },
- "⇑": { "codepoints": [8657], "characters": "\u21D1" },
- "⇕": { "codepoints": [8661], "characters": "\u21D5" },
- "↖": { "codepoints": [8598], "characters": "\u2196" },
- "↗": { "codepoints": [8599], "characters": "\u2197" },
- "ϒ": { "codepoints": [978], "characters": "\u03D2" },
- "Υ": { "codepoints": [933], "characters": "\u03A5" },
- "Ů": { "codepoints": [366], "characters": "\u016E" },
- "𝒰": { "codepoints": [119984], "characters": "\uD835\uDCB0" },
- "Ũ": { "codepoints": [360], "characters": "\u0168" },
- "Ü": { "codepoints": [220], "characters": "\u00DC" },
- "Ü": { "codepoints": [220], "characters": "\u00DC" },
- "⊫": { "codepoints": [8875], "characters": "\u22AB" },
- "⫫": { "codepoints": [10987], "characters": "\u2AEB" },
- "В": { "codepoints": [1042], "characters": "\u0412" },
- "⊩": { "codepoints": [8873], "characters": "\u22A9" },
- "⫦": { "codepoints": [10982], "characters": "\u2AE6" },
- "⋁": { "codepoints": [8897], "characters": "\u22C1" },
- "‖": { "codepoints": [8214], "characters": "\u2016" },
- "‖": { "codepoints": [8214], "characters": "\u2016" },
- "∣": { "codepoints": [8739], "characters": "\u2223" },
- "|": { "codepoints": [124], "characters": "\u007C" },
- "❘": { "codepoints": [10072], "characters": "\u2758" },
- "≀": { "codepoints": [8768], "characters": "\u2240" },
- " ": { "codepoints": [8202], "characters": "\u200A" },
- "𝔙": { "codepoints": [120089], "characters": "\uD835\uDD19" },
- "𝕍": { "codepoints": [120141], "characters": "\uD835\uDD4D" },
- "𝒱": { "codepoints": [119985], "characters": "\uD835\uDCB1" },
- "⊪": { "codepoints": [8874], "characters": "\u22AA" },
- "Ŵ": { "codepoints": [372], "characters": "\u0174" },
- "⋀": { "codepoints": [8896], "characters": "\u22C0" },
- "𝔚": { "codepoints": [120090], "characters": "\uD835\uDD1A" },
- "𝕎": { "codepoints": [120142], "characters": "\uD835\uDD4E" },
- "𝒲": { "codepoints": [119986], "characters": "\uD835\uDCB2" },
- "𝔛": { "codepoints": [120091], "characters": "\uD835\uDD1B" },
- "Ξ": { "codepoints": [926], "characters": "\u039E" },
- "𝕏": { "codepoints": [120143], "characters": "\uD835\uDD4F" },
- "𝒳": { "codepoints": [119987], "characters": "\uD835\uDCB3" },
- "Я": { "codepoints": [1071], "characters": "\u042F" },
- "Ї": { "codepoints": [1031], "characters": "\u0407" },
- "Ю": { "codepoints": [1070], "characters": "\u042E" },
- "Ý": { "codepoints": [221], "characters": "\u00DD" },
- "Ý": { "codepoints": [221], "characters": "\u00DD" },
- "Ŷ": { "codepoints": [374], "characters": "\u0176" },
- "Ы": { "codepoints": [1067], "characters": "\u042B" },
- "𝔜": { "codepoints": [120092], "characters": "\uD835\uDD1C" },
- "𝕐": { "codepoints": [120144], "characters": "\uD835\uDD50" },
- "𝒴": { "codepoints": [119988], "characters": "\uD835\uDCB4" },
- "Ÿ": { "codepoints": [376], "characters": "\u0178" },
- "Ж": { "codepoints": [1046], "characters": "\u0416" },
- "Ź": { "codepoints": [377], "characters": "\u0179" },
- "Ž": { "codepoints": [381], "characters": "\u017D" },
- "З": { "codepoints": [1047], "characters": "\u0417" },
- "Ż": { "codepoints": [379], "characters": "\u017B" },
- "​": { "codepoints": [8203], "characters": "\u200B" },
- "Ζ": { "codepoints": [918], "characters": "\u0396" },
- "ℨ": { "codepoints": [8488], "characters": "\u2128" },
- "ℤ": { "codepoints": [8484], "characters": "\u2124" },
- "𝒵": { "codepoints": [119989], "characters": "\uD835\uDCB5" },
- "á": { "codepoints": [225], "characters": "\u00E1" },
- "á": { "codepoints": [225], "characters": "\u00E1" },
- "ă": { "codepoints": [259], "characters": "\u0103" },
- "∾": { "codepoints": [8766], "characters": "\u223E" },
- "∾̳": { "codepoints": [8766, 819], "characters": "\u223E\u0333" },
- "∿": { "codepoints": [8767], "characters": "\u223F" },
- "â": { "codepoints": [226], "characters": "\u00E2" },
- "â": { "codepoints": [226], "characters": "\u00E2" },
- "´": { "codepoints": [180], "characters": "\u00B4" },
- "´": { "codepoints": [180], "characters": "\u00B4" },
- "а": { "codepoints": [1072], "characters": "\u0430" },
- "æ": { "codepoints": [230], "characters": "\u00E6" },
- "æ": { "codepoints": [230], "characters": "\u00E6" },
- "⁡": { "codepoints": [8289], "characters": "\u2061" },
- "𝔞": { "codepoints": [120094], "characters": "\uD835\uDD1E" },
- "à": { "codepoints": [224], "characters": "\u00E0" },
- "à": { "codepoints": [224], "characters": "\u00E0" },
- "ℵ": { "codepoints": [8501], "characters": "\u2135" },
- "ℵ": { "codepoints": [8501], "characters": "\u2135" },
- "α": { "codepoints": [945], "characters": "\u03B1" },
- "ā": { "codepoints": [257], "characters": "\u0101" },
- "⨿": { "codepoints": [10815], "characters": "\u2A3F" },
- "&": { "codepoints": [38], "characters": "\u0026" },
- "&": { "codepoints": [38], "characters": "\u0026" },
- "∧": { "codepoints": [8743], "characters": "\u2227" },
- "⩕": { "codepoints": [10837], "characters": "\u2A55" },
- "⩜": { "codepoints": [10844], "characters": "\u2A5C" },
- "⩘": { "codepoints": [10840], "characters": "\u2A58" },
- "⩚": { "codepoints": [10842], "characters": "\u2A5A" },
- "∠": { "codepoints": [8736], "characters": "\u2220" },
- "⦤": { "codepoints": [10660], "characters": "\u29A4" },
- "∠": { "codepoints": [8736], "characters": "\u2220" },
- "∡": { "codepoints": [8737], "characters": "\u2221" },
- "⦨": { "codepoints": [10664], "characters": "\u29A8" },
- "⦩": { "codepoints": [10665], "characters": "\u29A9" },
- "⦪": { "codepoints": [10666], "characters": "\u29AA" },
- "⦫": { "codepoints": [10667], "characters": "\u29AB" },
- "⦬": { "codepoints": [10668], "characters": "\u29AC" },
- "⦭": { "codepoints": [10669], "characters": "\u29AD" },
- "⦮": { "codepoints": [10670], "characters": "\u29AE" },
- "⦯": { "codepoints": [10671], "characters": "\u29AF" },
- "∟": { "codepoints": [8735], "characters": "\u221F" },
- "⊾": { "codepoints": [8894], "characters": "\u22BE" },
- "⦝": { "codepoints": [10653], "characters": "\u299D" },
- "∢": { "codepoints": [8738], "characters": "\u2222" },
- "Å": { "codepoints": [197], "characters": "\u00C5" },
- "⍼": { "codepoints": [9084], "characters": "\u237C" },
- "ą": { "codepoints": [261], "characters": "\u0105" },
- "𝕒": { "codepoints": [120146], "characters": "\uD835\uDD52" },
- "≈": { "codepoints": [8776], "characters": "\u2248" },
- "⩰": { "codepoints": [10864], "characters": "\u2A70" },
- "⩯": { "codepoints": [10863], "characters": "\u2A6F" },
- "≊": { "codepoints": [8778], "characters": "\u224A" },
- "≋": { "codepoints": [8779], "characters": "\u224B" },
- "'": { "codepoints": [39], "characters": "\u0027" },
- "≈": { "codepoints": [8776], "characters": "\u2248" },
- "≊": { "codepoints": [8778], "characters": "\u224A" },
- "å": { "codepoints": [229], "characters": "\u00E5" },
- "å": { "codepoints": [229], "characters": "\u00E5" },
- "𝒶": { "codepoints": [119990], "characters": "\uD835\uDCB6" },
- "*": { "codepoints": [42], "characters": "\u002A" },
- "≈": { "codepoints": [8776], "characters": "\u2248" },
- "≍": { "codepoints": [8781], "characters": "\u224D" },
- "ã": { "codepoints": [227], "characters": "\u00E3" },
- "ã": { "codepoints": [227], "characters": "\u00E3" },
- "ä": { "codepoints": [228], "characters": "\u00E4" },
- "ä": { "codepoints": [228], "characters": "\u00E4" },
- "∳": { "codepoints": [8755], "characters": "\u2233" },
- "⨑": { "codepoints": [10769], "characters": "\u2A11" },
- "⫭": { "codepoints": [10989], "characters": "\u2AED" },
- "≌": { "codepoints": [8780], "characters": "\u224C" },
- "϶": { "codepoints": [1014], "characters": "\u03F6" },
- "‵": { "codepoints": [8245], "characters": "\u2035" },
- "∽": { "codepoints": [8765], "characters": "\u223D" },
- "⋍": { "codepoints": [8909], "characters": "\u22CD" },
- "⊽": { "codepoints": [8893], "characters": "\u22BD" },
- "⌅": { "codepoints": [8965], "characters": "\u2305" },
- "⌅": { "codepoints": [8965], "characters": "\u2305" },
- "⎵": { "codepoints": [9141], "characters": "\u23B5" },
- "⎶": { "codepoints": [9142], "characters": "\u23B6" },
- "≌": { "codepoints": [8780], "characters": "\u224C" },
- "б": { "codepoints": [1073], "characters": "\u0431" },
- "„": { "codepoints": [8222], "characters": "\u201E" },
- "∵": { "codepoints": [8757], "characters": "\u2235" },
- "∵": { "codepoints": [8757], "characters": "\u2235" },
- "⦰": { "codepoints": [10672], "characters": "\u29B0" },
- "϶": { "codepoints": [1014], "characters": "\u03F6" },
- "ℬ": { "codepoints": [8492], "characters": "\u212C" },
- "β": { "codepoints": [946], "characters": "\u03B2" },
- "ℶ": { "codepoints": [8502], "characters": "\u2136" },
- "≬": { "codepoints": [8812], "characters": "\u226C" },
- "𝔟": { "codepoints": [120095], "characters": "\uD835\uDD1F" },
- "⋂": { "codepoints": [8898], "characters": "\u22C2" },
- "◯": { "codepoints": [9711], "characters": "\u25EF" },
- "⋃": { "codepoints": [8899], "characters": "\u22C3" },
- "⨀": { "codepoints": [10752], "characters": "\u2A00" },
- "⨁": { "codepoints": [10753], "characters": "\u2A01" },
- "⨂": { "codepoints": [10754], "characters": "\u2A02" },
- "⨆": { "codepoints": [10758], "characters": "\u2A06" },
- "★": { "codepoints": [9733], "characters": "\u2605" },
- "▽": { "codepoints": [9661], "characters": "\u25BD" },
- "△": { "codepoints": [9651], "characters": "\u25B3" },
- "⨄": { "codepoints": [10756], "characters": "\u2A04" },
- "⋁": { "codepoints": [8897], "characters": "\u22C1" },
- "⋀": { "codepoints": [8896], "characters": "\u22C0" },
- "⤍": { "codepoints": [10509], "characters": "\u290D" },
- "⧫": { "codepoints": [10731], "characters": "\u29EB" },
- "▪": { "codepoints": [9642], "characters": "\u25AA" },
- "▴": { "codepoints": [9652], "characters": "\u25B4" },
- "▾": { "codepoints": [9662], "characters": "\u25BE" },
- "◂": { "codepoints": [9666], "characters": "\u25C2" },
- "▸": { "codepoints": [9656], "characters": "\u25B8" },
- "␣": { "codepoints": [9251], "characters": "\u2423" },
- "▒": { "codepoints": [9618], "characters": "\u2592" },
- "░": { "codepoints": [9617], "characters": "\u2591" },
- "▓": { "codepoints": [9619], "characters": "\u2593" },
- "█": { "codepoints": [9608], "characters": "\u2588" },
- "=⃥": { "codepoints": [61, 8421], "characters": "\u003D\u20E5" },
- "≡⃥": { "codepoints": [8801, 8421], "characters": "\u2261\u20E5" },
- "⌐": { "codepoints": [8976], "characters": "\u2310" },
- "𝕓": { "codepoints": [120147], "characters": "\uD835\uDD53" },
- "⊥": { "codepoints": [8869], "characters": "\u22A5" },
- "⊥": { "codepoints": [8869], "characters": "\u22A5" },
- "⋈": { "codepoints": [8904], "characters": "\u22C8" },
- "╗": { "codepoints": [9559], "characters": "\u2557" },
- "╔": { "codepoints": [9556], "characters": "\u2554" },
- "╖": { "codepoints": [9558], "characters": "\u2556" },
- "╓": { "codepoints": [9555], "characters": "\u2553" },
- "═": { "codepoints": [9552], "characters": "\u2550" },
- "╦": { "codepoints": [9574], "characters": "\u2566" },
- "╩": { "codepoints": [9577], "characters": "\u2569" },
- "╤": { "codepoints": [9572], "characters": "\u2564" },
- "╧": { "codepoints": [9575], "characters": "\u2567" },
- "╝": { "codepoints": [9565], "characters": "\u255D" },
- "╚": { "codepoints": [9562], "characters": "\u255A" },
- "╜": { "codepoints": [9564], "characters": "\u255C" },
- "╙": { "codepoints": [9561], "characters": "\u2559" },
- "║": { "codepoints": [9553], "characters": "\u2551" },
- "╬": { "codepoints": [9580], "characters": "\u256C" },
- "╣": { "codepoints": [9571], "characters": "\u2563" },
- "╠": { "codepoints": [9568], "characters": "\u2560" },
- "╫": { "codepoints": [9579], "characters": "\u256B" },
- "╢": { "codepoints": [9570], "characters": "\u2562" },
- "╟": { "codepoints": [9567], "characters": "\u255F" },
- "⧉": { "codepoints": [10697], "characters": "\u29C9" },
- "╕": { "codepoints": [9557], "characters": "\u2555" },
- "╒": { "codepoints": [9554], "characters": "\u2552" },
- "┐": { "codepoints": [9488], "characters": "\u2510" },
- "┌": { "codepoints": [9484], "characters": "\u250C" },
- "─": { "codepoints": [9472], "characters": "\u2500" },
- "╥": { "codepoints": [9573], "characters": "\u2565" },
- "╨": { "codepoints": [9576], "characters": "\u2568" },
- "┬": { "codepoints": [9516], "characters": "\u252C" },
- "┴": { "codepoints": [9524], "characters": "\u2534" },
- "⊟": { "codepoints": [8863], "characters": "\u229F" },
- "⊞": { "codepoints": [8862], "characters": "\u229E" },
- "⊠": { "codepoints": [8864], "characters": "\u22A0" },
- "╛": { "codepoints": [9563], "characters": "\u255B" },
- "╘": { "codepoints": [9560], "characters": "\u2558" },
- "┘": { "codepoints": [9496], "characters": "\u2518" },
- "└": { "codepoints": [9492], "characters": "\u2514" },
- "│": { "codepoints": [9474], "characters": "\u2502" },
- "╪": { "codepoints": [9578], "characters": "\u256A" },
- "╡": { "codepoints": [9569], "characters": "\u2561" },
- "╞": { "codepoints": [9566], "characters": "\u255E" },
- "┼": { "codepoints": [9532], "characters": "\u253C" },
- "┤": { "codepoints": [9508], "characters": "\u2524" },
- "├": { "codepoints": [9500], "characters": "\u251C" },
- "‵": { "codepoints": [8245], "characters": "\u2035" },
- "˘": { "codepoints": [728], "characters": "\u02D8" },
- "¦": { "codepoints": [166], "characters": "\u00A6" },
- "¦": { "codepoints": [166], "characters": "\u00A6" },
- "𝒷": { "codepoints": [119991], "characters": "\uD835\uDCB7" },
- "⁏": { "codepoints": [8271], "characters": "\u204F" },
- "∽": { "codepoints": [8765], "characters": "\u223D" },
- "⋍": { "codepoints": [8909], "characters": "\u22CD" },
- "\": { "codepoints": [92], "characters": "\u005C" },
- "⧅": { "codepoints": [10693], "characters": "\u29C5" },
- "⟈": { "codepoints": [10184], "characters": "\u27C8" },
- "•": { "codepoints": [8226], "characters": "\u2022" },
- "•": { "codepoints": [8226], "characters": "\u2022" },
- "≎": { "codepoints": [8782], "characters": "\u224E" },
- "⪮": { "codepoints": [10926], "characters": "\u2AAE" },
- "≏": { "codepoints": [8783], "characters": "\u224F" },
- "≏": { "codepoints": [8783], "characters": "\u224F" },
- "ć": { "codepoints": [263], "characters": "\u0107" },
- "∩": { "codepoints": [8745], "characters": "\u2229" },
- "⩄": { "codepoints": [10820], "characters": "\u2A44" },
- "⩉": { "codepoints": [10825], "characters": "\u2A49" },
- "⩋": { "codepoints": [10827], "characters": "\u2A4B" },
- "⩇": { "codepoints": [10823], "characters": "\u2A47" },
- "⩀": { "codepoints": [10816], "characters": "\u2A40" },
- "∩︀": { "codepoints": [8745, 65024], "characters": "\u2229\uFE00" },
- "⁁": { "codepoints": [8257], "characters": "\u2041" },
- "ˇ": { "codepoints": [711], "characters": "\u02C7" },
- "⩍": { "codepoints": [10829], "characters": "\u2A4D" },
- "č": { "codepoints": [269], "characters": "\u010D" },
- "ç": { "codepoints": [231], "characters": "\u00E7" },
- "ç": { "codepoints": [231], "characters": "\u00E7" },
- "ĉ": { "codepoints": [265], "characters": "\u0109" },
- "⩌": { "codepoints": [10828], "characters": "\u2A4C" },
- "⩐": { "codepoints": [10832], "characters": "\u2A50" },
- "ċ": { "codepoints": [267], "characters": "\u010B" },
- "¸": { "codepoints": [184], "characters": "\u00B8" },
- "¸": { "codepoints": [184], "characters": "\u00B8" },
- "⦲": { "codepoints": [10674], "characters": "\u29B2" },
- "¢": { "codepoints": [162], "characters": "\u00A2" },
- "¢": { "codepoints": [162], "characters": "\u00A2" },
- "·": { "codepoints": [183], "characters": "\u00B7" },
- "𝔠": { "codepoints": [120096], "characters": "\uD835\uDD20" },
- "ч": { "codepoints": [1095], "characters": "\u0447" },
- "✓": { "codepoints": [10003], "characters": "\u2713" },
- "✓": { "codepoints": [10003], "characters": "\u2713" },
- "χ": { "codepoints": [967], "characters": "\u03C7" },
- "○": { "codepoints": [9675], "characters": "\u25CB" },
- "⧃": { "codepoints": [10691], "characters": "\u29C3" },
- "ˆ": { "codepoints": [710], "characters": "\u02C6" },
- "≗": { "codepoints": [8791], "characters": "\u2257" },
- "↺": { "codepoints": [8634], "characters": "\u21BA" },
- "↻": { "codepoints": [8635], "characters": "\u21BB" },
- "®": { "codepoints": [174], "characters": "\u00AE" },
- "Ⓢ": { "codepoints": [9416], "characters": "\u24C8" },
- "⊛": { "codepoints": [8859], "characters": "\u229B" },
- "⊚": { "codepoints": [8858], "characters": "\u229A" },
- "⊝": { "codepoints": [8861], "characters": "\u229D" },
- "≗": { "codepoints": [8791], "characters": "\u2257" },
- "⨐": { "codepoints": [10768], "characters": "\u2A10" },
- "⫯": { "codepoints": [10991], "characters": "\u2AEF" },
- "⧂": { "codepoints": [10690], "characters": "\u29C2" },
- "♣": { "codepoints": [9827], "characters": "\u2663" },
- "♣": { "codepoints": [9827], "characters": "\u2663" },
- ":": { "codepoints": [58], "characters": "\u003A" },
- "≔": { "codepoints": [8788], "characters": "\u2254" },
- "≔": { "codepoints": [8788], "characters": "\u2254" },
- ",": { "codepoints": [44], "characters": "\u002C" },
- "@": { "codepoints": [64], "characters": "\u0040" },
- "∁": { "codepoints": [8705], "characters": "\u2201" },
- "∘": { "codepoints": [8728], "characters": "\u2218" },
- "∁": { "codepoints": [8705], "characters": "\u2201" },
- "ℂ": { "codepoints": [8450], "characters": "\u2102" },
- "≅": { "codepoints": [8773], "characters": "\u2245" },
- "⩭": { "codepoints": [10861], "characters": "\u2A6D" },
- "∮": { "codepoints": [8750], "characters": "\u222E" },
- "𝕔": { "codepoints": [120148], "characters": "\uD835\uDD54" },
- "∐": { "codepoints": [8720], "characters": "\u2210" },
- "©": { "codepoints": [169], "characters": "\u00A9" },
- "©": { "codepoints": [169], "characters": "\u00A9" },
- "℗": { "codepoints": [8471], "characters": "\u2117" },
- "↵": { "codepoints": [8629], "characters": "\u21B5" },
- "✗": { "codepoints": [10007], "characters": "\u2717" },
- "𝒸": { "codepoints": [119992], "characters": "\uD835\uDCB8" },
- "⫏": { "codepoints": [10959], "characters": "\u2ACF" },
- "⫑": { "codepoints": [10961], "characters": "\u2AD1" },
- "⫐": { "codepoints": [10960], "characters": "\u2AD0" },
- "⫒": { "codepoints": [10962], "characters": "\u2AD2" },
- "⋯": { "codepoints": [8943], "characters": "\u22EF" },
- "⤸": { "codepoints": [10552], "characters": "\u2938" },
- "⤵": { "codepoints": [10549], "characters": "\u2935" },
- "⋞": { "codepoints": [8926], "characters": "\u22DE" },
- "⋟": { "codepoints": [8927], "characters": "\u22DF" },
- "↶": { "codepoints": [8630], "characters": "\u21B6" },
- "⤽": { "codepoints": [10557], "characters": "\u293D" },
- "∪": { "codepoints": [8746], "characters": "\u222A" },
- "⩈": { "codepoints": [10824], "characters": "\u2A48" },
- "⩆": { "codepoints": [10822], "characters": "\u2A46" },
- "⩊": { "codepoints": [10826], "characters": "\u2A4A" },
- "⊍": { "codepoints": [8845], "characters": "\u228D" },
- "⩅": { "codepoints": [10821], "characters": "\u2A45" },
- "∪︀": { "codepoints": [8746, 65024], "characters": "\u222A\uFE00" },
- "↷": { "codepoints": [8631], "characters": "\u21B7" },
- "⤼": { "codepoints": [10556], "characters": "\u293C" },
- "⋞": { "codepoints": [8926], "characters": "\u22DE" },
- "⋟": { "codepoints": [8927], "characters": "\u22DF" },
- "⋎": { "codepoints": [8910], "characters": "\u22CE" },
- "⋏": { "codepoints": [8911], "characters": "\u22CF" },
- "¤": { "codepoints": [164], "characters": "\u00A4" },
- "¤": { "codepoints": [164], "characters": "\u00A4" },
- "↶": { "codepoints": [8630], "characters": "\u21B6" },
- "↷": { "codepoints": [8631], "characters": "\u21B7" },
- "⋎": { "codepoints": [8910], "characters": "\u22CE" },
- "⋏": { "codepoints": [8911], "characters": "\u22CF" },
- "∲": { "codepoints": [8754], "characters": "\u2232" },
- "∱": { "codepoints": [8753], "characters": "\u2231" },
- "⌭": { "codepoints": [9005], "characters": "\u232D" },
- "⇓": { "codepoints": [8659], "characters": "\u21D3" },
- "⥥": { "codepoints": [10597], "characters": "\u2965" },
- "†": { "codepoints": [8224], "characters": "\u2020" },
- "ℸ": { "codepoints": [8504], "characters": "\u2138" },
- "↓": { "codepoints": [8595], "characters": "\u2193" },
- "‐": { "codepoints": [8208], "characters": "\u2010" },
- "⊣": { "codepoints": [8867], "characters": "\u22A3" },
- "⤏": { "codepoints": [10511], "characters": "\u290F" },
- "˝": { "codepoints": [733], "characters": "\u02DD" },
- "ď": { "codepoints": [271], "characters": "\u010F" },
- "д": { "codepoints": [1076], "characters": "\u0434" },
- "ⅆ": { "codepoints": [8518], "characters": "\u2146" },
- "‡": { "codepoints": [8225], "characters": "\u2021" },
- "⇊": { "codepoints": [8650], "characters": "\u21CA" },
- "⩷": { "codepoints": [10871], "characters": "\u2A77" },
- "°": { "codepoints": [176], "characters": "\u00B0" },
- "°": { "codepoints": [176], "characters": "\u00B0" },
- "δ": { "codepoints": [948], "characters": "\u03B4" },
- "⦱": { "codepoints": [10673], "characters": "\u29B1" },
- "⥿": { "codepoints": [10623], "characters": "\u297F" },
- "𝔡": { "codepoints": [120097], "characters": "\uD835\uDD21" },
- "⇃": { "codepoints": [8643], "characters": "\u21C3" },
- "⇂": { "codepoints": [8642], "characters": "\u21C2" },
- "⋄": { "codepoints": [8900], "characters": "\u22C4" },
- "⋄": { "codepoints": [8900], "characters": "\u22C4" },
- "♦": { "codepoints": [9830], "characters": "\u2666" },
- "♦": { "codepoints": [9830], "characters": "\u2666" },
- "¨": { "codepoints": [168], "characters": "\u00A8" },
- "ϝ": { "codepoints": [989], "characters": "\u03DD" },
- "⋲": { "codepoints": [8946], "characters": "\u22F2" },
- "÷": { "codepoints": [247], "characters": "\u00F7" },
- "÷": { "codepoints": [247], "characters": "\u00F7" },
- "÷": { "codepoints": [247], "characters": "\u00F7" },
- "⋇": { "codepoints": [8903], "characters": "\u22C7" },
- "⋇": { "codepoints": [8903], "characters": "\u22C7" },
- "ђ": { "codepoints": [1106], "characters": "\u0452" },
- "⌞": { "codepoints": [8990], "characters": "\u231E" },
- "⌍": { "codepoints": [8973], "characters": "\u230D" },
- "$": { "codepoints": [36], "characters": "\u0024" },
- "𝕕": { "codepoints": [120149], "characters": "\uD835\uDD55" },
- "˙": { "codepoints": [729], "characters": "\u02D9" },
- "≐": { "codepoints": [8784], "characters": "\u2250" },
- "≑": { "codepoints": [8785], "characters": "\u2251" },
- "∸": { "codepoints": [8760], "characters": "\u2238" },
- "∔": { "codepoints": [8724], "characters": "\u2214" },
- "⊡": { "codepoints": [8865], "characters": "\u22A1" },
- "⌆": { "codepoints": [8966], "characters": "\u2306" },
- "↓": { "codepoints": [8595], "characters": "\u2193" },
- "⇊": { "codepoints": [8650], "characters": "\u21CA" },
- "⇃": { "codepoints": [8643], "characters": "\u21C3" },
- "⇂": { "codepoints": [8642], "characters": "\u21C2" },
- "⤐": { "codepoints": [10512], "characters": "\u2910" },
- "⌟": { "codepoints": [8991], "characters": "\u231F" },
- "⌌": { "codepoints": [8972], "characters": "\u230C" },
- "𝒹": { "codepoints": [119993], "characters": "\uD835\uDCB9" },
- "ѕ": { "codepoints": [1109], "characters": "\u0455" },
- "⧶": { "codepoints": [10742], "characters": "\u29F6" },
- "đ": { "codepoints": [273], "characters": "\u0111" },
- "⋱": { "codepoints": [8945], "characters": "\u22F1" },
- "▿": { "codepoints": [9663], "characters": "\u25BF" },
- "▾": { "codepoints": [9662], "characters": "\u25BE" },
- "⇵": { "codepoints": [8693], "characters": "\u21F5" },
- "⥯": { "codepoints": [10607], "characters": "\u296F" },
- "⦦": { "codepoints": [10662], "characters": "\u29A6" },
- "џ": { "codepoints": [1119], "characters": "\u045F" },
- "⟿": { "codepoints": [10239], "characters": "\u27FF" },
- "⩷": { "codepoints": [10871], "characters": "\u2A77" },
- "≑": { "codepoints": [8785], "characters": "\u2251" },
- "é": { "codepoints": [233], "characters": "\u00E9" },
- "é": { "codepoints": [233], "characters": "\u00E9" },
- "⩮": { "codepoints": [10862], "characters": "\u2A6E" },
- "ě": { "codepoints": [283], "characters": "\u011B" },
- "≖": { "codepoints": [8790], "characters": "\u2256" },
- "ê": { "codepoints": [234], "characters": "\u00EA" },
- "ê": { "codepoints": [234], "characters": "\u00EA" },
- "≕": { "codepoints": [8789], "characters": "\u2255" },
- "э": { "codepoints": [1101], "characters": "\u044D" },
- "ė": { "codepoints": [279], "characters": "\u0117" },
- "ⅇ": { "codepoints": [8519], "characters": "\u2147" },
- "≒": { "codepoints": [8786], "characters": "\u2252" },
- "𝔢": { "codepoints": [120098], "characters": "\uD835\uDD22" },
- "⪚": { "codepoints": [10906], "characters": "\u2A9A" },
- "è": { "codepoints": [232], "characters": "\u00E8" },
- "è": { "codepoints": [232], "characters": "\u00E8" },
- "⪖": { "codepoints": [10902], "characters": "\u2A96" },
- "⪘": { "codepoints": [10904], "characters": "\u2A98" },
- "⪙": { "codepoints": [10905], "characters": "\u2A99" },
- "⏧": { "codepoints": [9191], "characters": "\u23E7" },
- "ℓ": { "codepoints": [8467], "characters": "\u2113" },
- "⪕": { "codepoints": [10901], "characters": "\u2A95" },
- "⪗": { "codepoints": [10903], "characters": "\u2A97" },
- "ē": { "codepoints": [275], "characters": "\u0113" },
- "∅": { "codepoints": [8709], "characters": "\u2205" },
- "∅": { "codepoints": [8709], "characters": "\u2205" },
- "∅": { "codepoints": [8709], "characters": "\u2205" },
- " ": { "codepoints": [8196], "characters": "\u2004" },
- " ": { "codepoints": [8197], "characters": "\u2005" },
- " ": { "codepoints": [8195], "characters": "\u2003" },
- "ŋ": { "codepoints": [331], "characters": "\u014B" },
- " ": { "codepoints": [8194], "characters": "\u2002" },
- "ę": { "codepoints": [281], "characters": "\u0119" },
- "𝕖": { "codepoints": [120150], "characters": "\uD835\uDD56" },
- "⋕": { "codepoints": [8917], "characters": "\u22D5" },
- "⧣": { "codepoints": [10723], "characters": "\u29E3" },
- "⩱": { "codepoints": [10865], "characters": "\u2A71" },
- "ε": { "codepoints": [949], "characters": "\u03B5" },
- "ε": { "codepoints": [949], "characters": "\u03B5" },
- "ϵ": { "codepoints": [1013], "characters": "\u03F5" },
- "≖": { "codepoints": [8790], "characters": "\u2256" },
- "≕": { "codepoints": [8789], "characters": "\u2255" },
- "≂": { "codepoints": [8770], "characters": "\u2242" },
- "⪖": { "codepoints": [10902], "characters": "\u2A96" },
- "⪕": { "codepoints": [10901], "characters": "\u2A95" },
- "=": { "codepoints": [61], "characters": "\u003D" },
- "≟": { "codepoints": [8799], "characters": "\u225F" },
- "≡": { "codepoints": [8801], "characters": "\u2261" },
- "⩸": { "codepoints": [10872], "characters": "\u2A78" },
- "⧥": { "codepoints": [10725], "characters": "\u29E5" },
- "≓": { "codepoints": [8787], "characters": "\u2253" },
- "⥱": { "codepoints": [10609], "characters": "\u2971" },
- "ℯ": { "codepoints": [8495], "characters": "\u212F" },
- "≐": { "codepoints": [8784], "characters": "\u2250" },
- "≂": { "codepoints": [8770], "characters": "\u2242" },
- "η": { "codepoints": [951], "characters": "\u03B7" },
- "ð": { "codepoints": [240], "characters": "\u00F0" },
- "ð": { "codepoints": [240], "characters": "\u00F0" },
- "ë": { "codepoints": [235], "characters": "\u00EB" },
- "ë": { "codepoints": [235], "characters": "\u00EB" },
- "€": { "codepoints": [8364], "characters": "\u20AC" },
- "!": { "codepoints": [33], "characters": "\u0021" },
- "∃": { "codepoints": [8707], "characters": "\u2203" },
- "ℰ": { "codepoints": [8496], "characters": "\u2130" },
- "ⅇ": { "codepoints": [8519], "characters": "\u2147" },
- "≒": { "codepoints": [8786], "characters": "\u2252" },
- "ф": { "codepoints": [1092], "characters": "\u0444" },
- "♀": { "codepoints": [9792], "characters": "\u2640" },
- "ffi": { "codepoints": [64259], "characters": "\uFB03" },
- "ff": { "codepoints": [64256], "characters": "\uFB00" },
- "ffl": { "codepoints": [64260], "characters": "\uFB04" },
- "𝔣": { "codepoints": [120099], "characters": "\uD835\uDD23" },
- "fi": { "codepoints": [64257], "characters": "\uFB01" },
- "fj": { "codepoints": [102, 106], "characters": "\u0066\u006A" },
- "♭": { "codepoints": [9837], "characters": "\u266D" },
- "fl": { "codepoints": [64258], "characters": "\uFB02" },
- "▱": { "codepoints": [9649], "characters": "\u25B1" },
- "ƒ": { "codepoints": [402], "characters": "\u0192" },
- "𝕗": { "codepoints": [120151], "characters": "\uD835\uDD57" },
- "∀": { "codepoints": [8704], "characters": "\u2200" },
- "⋔": { "codepoints": [8916], "characters": "\u22D4" },
- "⫙": { "codepoints": [10969], "characters": "\u2AD9" },
- "⨍": { "codepoints": [10765], "characters": "\u2A0D" },
- "½": { "codepoints": [189], "characters": "\u00BD" },
- "½": { "codepoints": [189], "characters": "\u00BD" },
- "⅓": { "codepoints": [8531], "characters": "\u2153" },
- "¼": { "codepoints": [188], "characters": "\u00BC" },
- "¼": { "codepoints": [188], "characters": "\u00BC" },
- "⅕": { "codepoints": [8533], "characters": "\u2155" },
- "⅙": { "codepoints": [8537], "characters": "\u2159" },
- "⅛": { "codepoints": [8539], "characters": "\u215B" },
- "⅔": { "codepoints": [8532], "characters": "\u2154" },
- "⅖": { "codepoints": [8534], "characters": "\u2156" },
- "¾": { "codepoints": [190], "characters": "\u00BE" },
- "¾": { "codepoints": [190], "characters": "\u00BE" },
- "⅗": { "codepoints": [8535], "characters": "\u2157" },
- "⅜": { "codepoints": [8540], "characters": "\u215C" },
- "⅘": { "codepoints": [8536], "characters": "\u2158" },
- "⅚": { "codepoints": [8538], "characters": "\u215A" },
- "⅝": { "codepoints": [8541], "characters": "\u215D" },
- "⅞": { "codepoints": [8542], "characters": "\u215E" },
- "⁄": { "codepoints": [8260], "characters": "\u2044" },
- "⌢": { "codepoints": [8994], "characters": "\u2322" },
- "𝒻": { "codepoints": [119995], "characters": "\uD835\uDCBB" },
- "≧": { "codepoints": [8807], "characters": "\u2267" },
- "⪌": { "codepoints": [10892], "characters": "\u2A8C" },
- "ǵ": { "codepoints": [501], "characters": "\u01F5" },
- "γ": { "codepoints": [947], "characters": "\u03B3" },
- "ϝ": { "codepoints": [989], "characters": "\u03DD" },
- "⪆": { "codepoints": [10886], "characters": "\u2A86" },
- "ğ": { "codepoints": [287], "characters": "\u011F" },
- "ĝ": { "codepoints": [285], "characters": "\u011D" },
- "г": { "codepoints": [1075], "characters": "\u0433" },
- "ġ": { "codepoints": [289], "characters": "\u0121" },
- "≥": { "codepoints": [8805], "characters": "\u2265" },
- "⋛": { "codepoints": [8923], "characters": "\u22DB" },
- "≥": { "codepoints": [8805], "characters": "\u2265" },
- "≧": { "codepoints": [8807], "characters": "\u2267" },
- "⩾": { "codepoints": [10878], "characters": "\u2A7E" },
- "⩾": { "codepoints": [10878], "characters": "\u2A7E" },
- "⪩": { "codepoints": [10921], "characters": "\u2AA9" },
- "⪀": { "codepoints": [10880], "characters": "\u2A80" },
- "⪂": { "codepoints": [10882], "characters": "\u2A82" },
- "⪄": { "codepoints": [10884], "characters": "\u2A84" },
- "⋛︀": { "codepoints": [8923, 65024], "characters": "\u22DB\uFE00" },
- "⪔": { "codepoints": [10900], "characters": "\u2A94" },
- "𝔤": { "codepoints": [120100], "characters": "\uD835\uDD24" },
- "≫": { "codepoints": [8811], "characters": "\u226B" },
- "⋙": { "codepoints": [8921], "characters": "\u22D9" },
- "ℷ": { "codepoints": [8503], "characters": "\u2137" },
- "ѓ": { "codepoints": [1107], "characters": "\u0453" },
- "≷": { "codepoints": [8823], "characters": "\u2277" },
- "⪒": { "codepoints": [10898], "characters": "\u2A92" },
- "⪥": { "codepoints": [10917], "characters": "\u2AA5" },
- "⪤": { "codepoints": [10916], "characters": "\u2AA4" },
- "≩": { "codepoints": [8809], "characters": "\u2269" },
- "⪊": { "codepoints": [10890], "characters": "\u2A8A" },
- "⪊": { "codepoints": [10890], "characters": "\u2A8A" },
- "⪈": { "codepoints": [10888], "characters": "\u2A88" },
- "⪈": { "codepoints": [10888], "characters": "\u2A88" },
- "≩": { "codepoints": [8809], "characters": "\u2269" },
- "⋧": { "codepoints": [8935], "characters": "\u22E7" },
- "𝕘": { "codepoints": [120152], "characters": "\uD835\uDD58" },
- "`": { "codepoints": [96], "characters": "\u0060" },
- "ℊ": { "codepoints": [8458], "characters": "\u210A" },
- "≳": { "codepoints": [8819], "characters": "\u2273" },
- "⪎": { "codepoints": [10894], "characters": "\u2A8E" },
- "⪐": { "codepoints": [10896], "characters": "\u2A90" },
- ">": { "codepoints": [62], "characters": "\u003E" },
- ">": { "codepoints": [62], "characters": "\u003E" },
- "⪧": { "codepoints": [10919], "characters": "\u2AA7" },
- "⩺": { "codepoints": [10874], "characters": "\u2A7A" },
- "⋗": { "codepoints": [8919], "characters": "\u22D7" },
- "⦕": { "codepoints": [10645], "characters": "\u2995" },
- "⩼": { "codepoints": [10876], "characters": "\u2A7C" },
- "⪆": { "codepoints": [10886], "characters": "\u2A86" },
- "⥸": { "codepoints": [10616], "characters": "\u2978" },
- "⋗": { "codepoints": [8919], "characters": "\u22D7" },
- "⋛": { "codepoints": [8923], "characters": "\u22DB" },
- "⪌": { "codepoints": [10892], "characters": "\u2A8C" },
- "≷": { "codepoints": [8823], "characters": "\u2277" },
- "≳": { "codepoints": [8819], "characters": "\u2273" },
- "≩︀": { "codepoints": [8809, 65024], "characters": "\u2269\uFE00" },
- "≩︀": { "codepoints": [8809, 65024], "characters": "\u2269\uFE00" },
- "⇔": { "codepoints": [8660], "characters": "\u21D4" },
- " ": { "codepoints": [8202], "characters": "\u200A" },
- "½": { "codepoints": [189], "characters": "\u00BD" },
- "ℋ": { "codepoints": [8459], "characters": "\u210B" },
- "ъ": { "codepoints": [1098], "characters": "\u044A" },
- "↔": { "codepoints": [8596], "characters": "\u2194" },
- "⥈": { "codepoints": [10568], "characters": "\u2948" },
- "↭": { "codepoints": [8621], "characters": "\u21AD" },
- "ℏ": { "codepoints": [8463], "characters": "\u210F" },
- "ĥ": { "codepoints": [293], "characters": "\u0125" },
- "♥": { "codepoints": [9829], "characters": "\u2665" },
- "♥": { "codepoints": [9829], "characters": "\u2665" },
- "…": { "codepoints": [8230], "characters": "\u2026" },
- "⊹": { "codepoints": [8889], "characters": "\u22B9" },
- "𝔥": { "codepoints": [120101], "characters": "\uD835\uDD25" },
- "⤥": { "codepoints": [10533], "characters": "\u2925" },
- "⤦": { "codepoints": [10534], "characters": "\u2926" },
- "⇿": { "codepoints": [8703], "characters": "\u21FF" },
- "∻": { "codepoints": [8763], "characters": "\u223B" },
- "↩": { "codepoints": [8617], "characters": "\u21A9" },
- "↪": { "codepoints": [8618], "characters": "\u21AA" },
- "𝕙": { "codepoints": [120153], "characters": "\uD835\uDD59" },
- "―": { "codepoints": [8213], "characters": "\u2015" },
- "𝒽": { "codepoints": [119997], "characters": "\uD835\uDCBD" },
- "ℏ": { "codepoints": [8463], "characters": "\u210F" },
- "ħ": { "codepoints": [295], "characters": "\u0127" },
- "⁃": { "codepoints": [8259], "characters": "\u2043" },
- "‐": { "codepoints": [8208], "characters": "\u2010" },
- "í": { "codepoints": [237], "characters": "\u00ED" },
- "í": { "codepoints": [237], "characters": "\u00ED" },
- "⁣": { "codepoints": [8291], "characters": "\u2063" },
- "î": { "codepoints": [238], "characters": "\u00EE" },
- "î": { "codepoints": [238], "characters": "\u00EE" },
- "и": { "codepoints": [1080], "characters": "\u0438" },
- "е": { "codepoints": [1077], "characters": "\u0435" },
- "¡": { "codepoints": [161], "characters": "\u00A1" },
- "¡": { "codepoints": [161], "characters": "\u00A1" },
- "⇔": { "codepoints": [8660], "characters": "\u21D4" },
- "𝔦": { "codepoints": [120102], "characters": "\uD835\uDD26" },
- "ì": { "codepoints": [236], "characters": "\u00EC" },
- "ì": { "codepoints": [236], "characters": "\u00EC" },
- "ⅈ": { "codepoints": [8520], "characters": "\u2148" },
- "⨌": { "codepoints": [10764], "characters": "\u2A0C" },
- "∭": { "codepoints": [8749], "characters": "\u222D" },
- "⧜": { "codepoints": [10716], "characters": "\u29DC" },
- "℩": { "codepoints": [8489], "characters": "\u2129" },
- "ij": { "codepoints": [307], "characters": "\u0133" },
- "ī": { "codepoints": [299], "characters": "\u012B" },
- "ℑ": { "codepoints": [8465], "characters": "\u2111" },
- "ℐ": { "codepoints": [8464], "characters": "\u2110" },
- "ℑ": { "codepoints": [8465], "characters": "\u2111" },
- "ı": { "codepoints": [305], "characters": "\u0131" },
- "⊷": { "codepoints": [8887], "characters": "\u22B7" },
- "Ƶ": { "codepoints": [437], "characters": "\u01B5" },
- "∈": { "codepoints": [8712], "characters": "\u2208" },
- "℅": { "codepoints": [8453], "characters": "\u2105" },
- "∞": { "codepoints": [8734], "characters": "\u221E" },
- "⧝": { "codepoints": [10717], "characters": "\u29DD" },
- "ı": { "codepoints": [305], "characters": "\u0131" },
- "∫": { "codepoints": [8747], "characters": "\u222B" },
- "⊺": { "codepoints": [8890], "characters": "\u22BA" },
- "ℤ": { "codepoints": [8484], "characters": "\u2124" },
- "⊺": { "codepoints": [8890], "characters": "\u22BA" },
- "⨗": { "codepoints": [10775], "characters": "\u2A17" },
- "⨼": { "codepoints": [10812], "characters": "\u2A3C" },
- "ё": { "codepoints": [1105], "characters": "\u0451" },
- "į": { "codepoints": [303], "characters": "\u012F" },
- "𝕚": { "codepoints": [120154], "characters": "\uD835\uDD5A" },
- "ι": { "codepoints": [953], "characters": "\u03B9" },
- "⨼": { "codepoints": [10812], "characters": "\u2A3C" },
- "¿": { "codepoints": [191], "characters": "\u00BF" },
- "¿": { "codepoints": [191], "characters": "\u00BF" },
- "𝒾": { "codepoints": [119998], "characters": "\uD835\uDCBE" },
- "∈": { "codepoints": [8712], "characters": "\u2208" },
- "⋹": { "codepoints": [8953], "characters": "\u22F9" },
- "⋵": { "codepoints": [8949], "characters": "\u22F5" },
- "⋴": { "codepoints": [8948], "characters": "\u22F4" },
- "⋳": { "codepoints": [8947], "characters": "\u22F3" },
- "∈": { "codepoints": [8712], "characters": "\u2208" },
- "⁢": { "codepoints": [8290], "characters": "\u2062" },
- "ĩ": { "codepoints": [297], "characters": "\u0129" },
- "і": { "codepoints": [1110], "characters": "\u0456" },
- "ï": { "codepoints": [239], "characters": "\u00EF" },
- "ï": { "codepoints": [239], "characters": "\u00EF" },
- "ĵ": { "codepoints": [309], "characters": "\u0135" },
- "й": { "codepoints": [1081], "characters": "\u0439" },
- "𝔧": { "codepoints": [120103], "characters": "\uD835\uDD27" },
- "ȷ": { "codepoints": [567], "characters": "\u0237" },
- "𝕛": { "codepoints": [120155], "characters": "\uD835\uDD5B" },
- "𝒿": { "codepoints": [119999], "characters": "\uD835\uDCBF" },
- "ј": { "codepoints": [1112], "characters": "\u0458" },
- "є": { "codepoints": [1108], "characters": "\u0454" },
- "κ": { "codepoints": [954], "characters": "\u03BA" },
- "ϰ": { "codepoints": [1008], "characters": "\u03F0" },
- "ķ": { "codepoints": [311], "characters": "\u0137" },
- "к": { "codepoints": [1082], "characters": "\u043A" },
- "𝔨": { "codepoints": [120104], "characters": "\uD835\uDD28" },
- "ĸ": { "codepoints": [312], "characters": "\u0138" },
- "х": { "codepoints": [1093], "characters": "\u0445" },
- "ќ": { "codepoints": [1116], "characters": "\u045C" },
- "𝕜": { "codepoints": [120156], "characters": "\uD835\uDD5C" },
- "𝓀": { "codepoints": [120000], "characters": "\uD835\uDCC0" },
- "⇚": { "codepoints": [8666], "characters": "\u21DA" },
- "⇐": { "codepoints": [8656], "characters": "\u21D0" },
- "⤛": { "codepoints": [10523], "characters": "\u291B" },
- "⤎": { "codepoints": [10510], "characters": "\u290E" },
- "≦": { "codepoints": [8806], "characters": "\u2266" },
- "⪋": { "codepoints": [10891], "characters": "\u2A8B" },
- "⥢": { "codepoints": [10594], "characters": "\u2962" },
- "ĺ": { "codepoints": [314], "characters": "\u013A" },
- "⦴": { "codepoints": [10676], "characters": "\u29B4" },
- "ℒ": { "codepoints": [8466], "characters": "\u2112" },
- "λ": { "codepoints": [955], "characters": "\u03BB" },
- "⟨": { "codepoints": [10216], "characters": "\u27E8" },
- "⦑": { "codepoints": [10641], "characters": "\u2991" },
- "⟨": { "codepoints": [10216], "characters": "\u27E8" },
- "⪅": { "codepoints": [10885], "characters": "\u2A85" },
- "«": { "codepoints": [171], "characters": "\u00AB" },
- "«": { "codepoints": [171], "characters": "\u00AB" },
- "←": { "codepoints": [8592], "characters": "\u2190" },
- "⇤": { "codepoints": [8676], "characters": "\u21E4" },
- "⤟": { "codepoints": [10527], "characters": "\u291F" },
- "⤝": { "codepoints": [10525], "characters": "\u291D" },
- "↩": { "codepoints": [8617], "characters": "\u21A9" },
- "↫": { "codepoints": [8619], "characters": "\u21AB" },
- "⤹": { "codepoints": [10553], "characters": "\u2939" },
- "⥳": { "codepoints": [10611], "characters": "\u2973" },
- "↢": { "codepoints": [8610], "characters": "\u21A2" },
- "⪫": { "codepoints": [10923], "characters": "\u2AAB" },
- "⤙": { "codepoints": [10521], "characters": "\u2919" },
- "⪭": { "codepoints": [10925], "characters": "\u2AAD" },
- "⪭︀": { "codepoints": [10925, 65024], "characters": "\u2AAD\uFE00" },
- "⤌": { "codepoints": [10508], "characters": "\u290C" },
- "❲": { "codepoints": [10098], "characters": "\u2772" },
- "{": { "codepoints": [123], "characters": "\u007B" },
- "[": { "codepoints": [91], "characters": "\u005B" },
- "⦋": { "codepoints": [10635], "characters": "\u298B" },
- "⦏": { "codepoints": [10639], "characters": "\u298F" },
- "⦍": { "codepoints": [10637], "characters": "\u298D" },
- "ľ": { "codepoints": [318], "characters": "\u013E" },
- "ļ": { "codepoints": [316], "characters": "\u013C" },
- "⌈": { "codepoints": [8968], "characters": "\u2308" },
- "{": { "codepoints": [123], "characters": "\u007B" },
- "л": { "codepoints": [1083], "characters": "\u043B" },
- "⤶": { "codepoints": [10550], "characters": "\u2936" },
- "“": { "codepoints": [8220], "characters": "\u201C" },
- "„": { "codepoints": [8222], "characters": "\u201E" },
- "⥧": { "codepoints": [10599], "characters": "\u2967" },
- "⥋": { "codepoints": [10571], "characters": "\u294B" },
- "↲": { "codepoints": [8626], "characters": "\u21B2" },
- "≤": { "codepoints": [8804], "characters": "\u2264" },
- "←": { "codepoints": [8592], "characters": "\u2190" },
- "↢": { "codepoints": [8610], "characters": "\u21A2" },
- "↽": { "codepoints": [8637], "characters": "\u21BD" },
- "↼": { "codepoints": [8636], "characters": "\u21BC" },
- "⇇": { "codepoints": [8647], "characters": "\u21C7" },
- "↔": { "codepoints": [8596], "characters": "\u2194" },
- "⇆": { "codepoints": [8646], "characters": "\u21C6" },
- "⇋": { "codepoints": [8651], "characters": "\u21CB" },
- "↭": { "codepoints": [8621], "characters": "\u21AD" },
- "⋋": { "codepoints": [8907], "characters": "\u22CB" },
- "⋚": { "codepoints": [8922], "characters": "\u22DA" },
- "≤": { "codepoints": [8804], "characters": "\u2264" },
- "≦": { "codepoints": [8806], "characters": "\u2266" },
- "⩽": { "codepoints": [10877], "characters": "\u2A7D" },
- "⩽": { "codepoints": [10877], "characters": "\u2A7D" },
- "⪨": { "codepoints": [10920], "characters": "\u2AA8" },
- "⩿": { "codepoints": [10879], "characters": "\u2A7F" },
- "⪁": { "codepoints": [10881], "characters": "\u2A81" },
- "⪃": { "codepoints": [10883], "characters": "\u2A83" },
- "⋚︀": { "codepoints": [8922, 65024], "characters": "\u22DA\uFE00" },
- "⪓": { "codepoints": [10899], "characters": "\u2A93" },
- "⪅": { "codepoints": [10885], "characters": "\u2A85" },
- "⋖": { "codepoints": [8918], "characters": "\u22D6" },
- "⋚": { "codepoints": [8922], "characters": "\u22DA" },
- "⪋": { "codepoints": [10891], "characters": "\u2A8B" },
- "≶": { "codepoints": [8822], "characters": "\u2276" },
- "≲": { "codepoints": [8818], "characters": "\u2272" },
- "⥼": { "codepoints": [10620], "characters": "\u297C" },
- "⌊": { "codepoints": [8970], "characters": "\u230A" },
- "𝔩": { "codepoints": [120105], "characters": "\uD835\uDD29" },
- "≶": { "codepoints": [8822], "characters": "\u2276" },
- "⪑": { "codepoints": [10897], "characters": "\u2A91" },
- "↽": { "codepoints": [8637], "characters": "\u21BD" },
- "↼": { "codepoints": [8636], "characters": "\u21BC" },
- "⥪": { "codepoints": [10602], "characters": "\u296A" },
- "▄": { "codepoints": [9604], "characters": "\u2584" },
- "љ": { "codepoints": [1113], "characters": "\u0459" },
- "≪": { "codepoints": [8810], "characters": "\u226A" },
- "⇇": { "codepoints": [8647], "characters": "\u21C7" },
- "⌞": { "codepoints": [8990], "characters": "\u231E" },
- "⥫": { "codepoints": [10603], "characters": "\u296B" },
- "◺": { "codepoints": [9722], "characters": "\u25FA" },
- "ŀ": { "codepoints": [320], "characters": "\u0140" },
- "⎰": { "codepoints": [9136], "characters": "\u23B0" },
- "⎰": { "codepoints": [9136], "characters": "\u23B0" },
- "≨": { "codepoints": [8808], "characters": "\u2268" },
- "⪉": { "codepoints": [10889], "characters": "\u2A89" },
- "⪉": { "codepoints": [10889], "characters": "\u2A89" },
- "⪇": { "codepoints": [10887], "characters": "\u2A87" },
- "⪇": { "codepoints": [10887], "characters": "\u2A87" },
- "≨": { "codepoints": [8808], "characters": "\u2268" },
- "⋦": { "codepoints": [8934], "characters": "\u22E6" },
- "⟬": { "codepoints": [10220], "characters": "\u27EC" },
- "⇽": { "codepoints": [8701], "characters": "\u21FD" },
- "⟦": { "codepoints": [10214], "characters": "\u27E6" },
- "⟵": { "codepoints": [10229], "characters": "\u27F5" },
- "⟷": { "codepoints": [10231], "characters": "\u27F7" },
- "⟼": { "codepoints": [10236], "characters": "\u27FC" },
- "⟶": { "codepoints": [10230], "characters": "\u27F6" },
- "↫": { "codepoints": [8619], "characters": "\u21AB" },
- "↬": { "codepoints": [8620], "characters": "\u21AC" },
- "⦅": { "codepoints": [10629], "characters": "\u2985" },
- "𝕝": { "codepoints": [120157], "characters": "\uD835\uDD5D" },
- "⨭": { "codepoints": [10797], "characters": "\u2A2D" },
- "⨴": { "codepoints": [10804], "characters": "\u2A34" },
- "∗": { "codepoints": [8727], "characters": "\u2217" },
- "_": { "codepoints": [95], "characters": "\u005F" },
- "◊": { "codepoints": [9674], "characters": "\u25CA" },
- "◊": { "codepoints": [9674], "characters": "\u25CA" },
- "⧫": { "codepoints": [10731], "characters": "\u29EB" },
- "(": { "codepoints": [40], "characters": "\u0028" },
- "⦓": { "codepoints": [10643], "characters": "\u2993" },
- "⇆": { "codepoints": [8646], "characters": "\u21C6" },
- "⌟": { "codepoints": [8991], "characters": "\u231F" },
- "⇋": { "codepoints": [8651], "characters": "\u21CB" },
- "⥭": { "codepoints": [10605], "characters": "\u296D" },
- "‎": { "codepoints": [8206], "characters": "\u200E" },
- "⊿": { "codepoints": [8895], "characters": "\u22BF" },
- "‹": { "codepoints": [8249], "characters": "\u2039" },
- "𝓁": { "codepoints": [120001], "characters": "\uD835\uDCC1" },
- "↰": { "codepoints": [8624], "characters": "\u21B0" },
- "≲": { "codepoints": [8818], "characters": "\u2272" },
- "⪍": { "codepoints": [10893], "characters": "\u2A8D" },
- "⪏": { "codepoints": [10895], "characters": "\u2A8F" },
- "[": { "codepoints": [91], "characters": "\u005B" },
- "‘": { "codepoints": [8216], "characters": "\u2018" },
- "‚": { "codepoints": [8218], "characters": "\u201A" },
- "ł": { "codepoints": [322], "characters": "\u0142" },
- "<": { "codepoints": [60], "characters": "\u003C" },
- "<": { "codepoints": [60], "characters": "\u003C" },
- "⪦": { "codepoints": [10918], "characters": "\u2AA6" },
- "⩹": { "codepoints": [10873], "characters": "\u2A79" },
- "⋖": { "codepoints": [8918], "characters": "\u22D6" },
- "⋋": { "codepoints": [8907], "characters": "\u22CB" },
- "⋉": { "codepoints": [8905], "characters": "\u22C9" },
- "⥶": { "codepoints": [10614], "characters": "\u2976" },
- "⩻": { "codepoints": [10875], "characters": "\u2A7B" },
- "⦖": { "codepoints": [10646], "characters": "\u2996" },
- "◃": { "codepoints": [9667], "characters": "\u25C3" },
- "⊴": { "codepoints": [8884], "characters": "\u22B4" },
- "◂": { "codepoints": [9666], "characters": "\u25C2" },
- "⥊": { "codepoints": [10570], "characters": "\u294A" },
- "⥦": { "codepoints": [10598], "characters": "\u2966" },
- "≨︀": { "codepoints": [8808, 65024], "characters": "\u2268\uFE00" },
- "≨︀": { "codepoints": [8808, 65024], "characters": "\u2268\uFE00" },
- "∺": { "codepoints": [8762], "characters": "\u223A" },
- "¯": { "codepoints": [175], "characters": "\u00AF" },
- "¯": { "codepoints": [175], "characters": "\u00AF" },
- "♂": { "codepoints": [9794], "characters": "\u2642" },
- "✠": { "codepoints": [10016], "characters": "\u2720" },
- "✠": { "codepoints": [10016], "characters": "\u2720" },
- "↦": { "codepoints": [8614], "characters": "\u21A6" },
- "↦": { "codepoints": [8614], "characters": "\u21A6" },
- "↧": { "codepoints": [8615], "characters": "\u21A7" },
- "↤": { "codepoints": [8612], "characters": "\u21A4" },
- "↥": { "codepoints": [8613], "characters": "\u21A5" },
- "▮": { "codepoints": [9646], "characters": "\u25AE" },
- "⨩": { "codepoints": [10793], "characters": "\u2A29" },
- "м": { "codepoints": [1084], "characters": "\u043C" },
- "—": { "codepoints": [8212], "characters": "\u2014" },
- "∡": { "codepoints": [8737], "characters": "\u2221" },
- "𝔪": { "codepoints": [120106], "characters": "\uD835\uDD2A" },
- "℧": { "codepoints": [8487], "characters": "\u2127" },
- "µ": { "codepoints": [181], "characters": "\u00B5" },
- "µ": { "codepoints": [181], "characters": "\u00B5" },
- "∣": { "codepoints": [8739], "characters": "\u2223" },
- "*": { "codepoints": [42], "characters": "\u002A" },
- "⫰": { "codepoints": [10992], "characters": "\u2AF0" },
- "·": { "codepoints": [183], "characters": "\u00B7" },
- "·": { "codepoints": [183], "characters": "\u00B7" },
- "−": { "codepoints": [8722], "characters": "\u2212" },
- "⊟": { "codepoints": [8863], "characters": "\u229F" },
- "∸": { "codepoints": [8760], "characters": "\u2238" },
- "⨪": { "codepoints": [10794], "characters": "\u2A2A" },
- "⫛": { "codepoints": [10971], "characters": "\u2ADB" },
- "…": { "codepoints": [8230], "characters": "\u2026" },
- "∓": { "codepoints": [8723], "characters": "\u2213" },
- "⊧": { "codepoints": [8871], "characters": "\u22A7" },
- "𝕞": { "codepoints": [120158], "characters": "\uD835\uDD5E" },
- "∓": { "codepoints": [8723], "characters": "\u2213" },
- "𝓂": { "codepoints": [120002], "characters": "\uD835\uDCC2" },
- "∾": { "codepoints": [8766], "characters": "\u223E" },
- "μ": { "codepoints": [956], "characters": "\u03BC" },
- "⊸": { "codepoints": [8888], "characters": "\u22B8" },
- "⊸": { "codepoints": [8888], "characters": "\u22B8" },
- "⋙̸": { "codepoints": [8921, 824], "characters": "\u22D9\u0338" },
- "≫⃒": { "codepoints": [8811, 8402], "characters": "\u226B\u20D2" },
- "≫̸": { "codepoints": [8811, 824], "characters": "\u226B\u0338" },
- "⇍": { "codepoints": [8653], "characters": "\u21CD" },
- "⇎": { "codepoints": [8654], "characters": "\u21CE" },
- "⋘̸": { "codepoints": [8920, 824], "characters": "\u22D8\u0338" },
- "≪⃒": { "codepoints": [8810, 8402], "characters": "\u226A\u20D2" },
- "≪̸": { "codepoints": [8810, 824], "characters": "\u226A\u0338" },
- "⇏": { "codepoints": [8655], "characters": "\u21CF" },
- "⊯": { "codepoints": [8879], "characters": "\u22AF" },
- "⊮": { "codepoints": [8878], "characters": "\u22AE" },
- "∇": { "codepoints": [8711], "characters": "\u2207" },
- "ń": { "codepoints": [324], "characters": "\u0144" },
- "∠⃒": { "codepoints": [8736, 8402], "characters": "\u2220\u20D2" },
- "≉": { "codepoints": [8777], "characters": "\u2249" },
- "⩰̸": { "codepoints": [10864, 824], "characters": "\u2A70\u0338" },
- "≋̸": { "codepoints": [8779, 824], "characters": "\u224B\u0338" },
- "ʼn": { "codepoints": [329], "characters": "\u0149" },
- "≉": { "codepoints": [8777], "characters": "\u2249" },
- "♮": { "codepoints": [9838], "characters": "\u266E" },
- "♮": { "codepoints": [9838], "characters": "\u266E" },
- "ℕ": { "codepoints": [8469], "characters": "\u2115" },
- " ": { "codepoints": [160], "characters": "\u00A0" },
- " ": { "codepoints": [160], "characters": "\u00A0" },
- "≎̸": { "codepoints": [8782, 824], "characters": "\u224E\u0338" },
- "≏̸": { "codepoints": [8783, 824], "characters": "\u224F\u0338" },
- "⩃": { "codepoints": [10819], "characters": "\u2A43" },
- "ň": { "codepoints": [328], "characters": "\u0148" },
- "ņ": { "codepoints": [326], "characters": "\u0146" },
- "≇": { "codepoints": [8775], "characters": "\u2247" },
- "⩭̸": { "codepoints": [10861, 824], "characters": "\u2A6D\u0338" },
- "⩂": { "codepoints": [10818], "characters": "\u2A42" },
- "н": { "codepoints": [1085], "characters": "\u043D" },
- "–": { "codepoints": [8211], "characters": "\u2013" },
- "≠": { "codepoints": [8800], "characters": "\u2260" },
- "⇗": { "codepoints": [8663], "characters": "\u21D7" },
- "⤤": { "codepoints": [10532], "characters": "\u2924" },
- "↗": { "codepoints": [8599], "characters": "\u2197" },
- "↗": { "codepoints": [8599], "characters": "\u2197" },
- "≐̸": { "codepoints": [8784, 824], "characters": "\u2250\u0338" },
- "≢": { "codepoints": [8802], "characters": "\u2262" },
- "⤨": { "codepoints": [10536], "characters": "\u2928" },
- "≂̸": { "codepoints": [8770, 824], "characters": "\u2242\u0338" },
- "∄": { "codepoints": [8708], "characters": "\u2204" },
- "∄": { "codepoints": [8708], "characters": "\u2204" },
- "𝔫": { "codepoints": [120107], "characters": "\uD835\uDD2B" },
- "≧̸": { "codepoints": [8807, 824], "characters": "\u2267\u0338" },
- "≱": { "codepoints": [8817], "characters": "\u2271" },
- "≱": { "codepoints": [8817], "characters": "\u2271" },
- "≧̸": { "codepoints": [8807, 824], "characters": "\u2267\u0338" },
- "⩾̸": { "codepoints": [10878, 824], "characters": "\u2A7E\u0338" },
- "⩾̸": { "codepoints": [10878, 824], "characters": "\u2A7E\u0338" },
- "≵": { "codepoints": [8821], "characters": "\u2275" },
- "≯": { "codepoints": [8815], "characters": "\u226F" },
- "≯": { "codepoints": [8815], "characters": "\u226F" },
- "⇎": { "codepoints": [8654], "characters": "\u21CE" },
- "↮": { "codepoints": [8622], "characters": "\u21AE" },
- "⫲": { "codepoints": [10994], "characters": "\u2AF2" },
- "∋": { "codepoints": [8715], "characters": "\u220B" },
- "⋼": { "codepoints": [8956], "characters": "\u22FC" },
- "⋺": { "codepoints": [8954], "characters": "\u22FA" },
- "∋": { "codepoints": [8715], "characters": "\u220B" },
- "њ": { "codepoints": [1114], "characters": "\u045A" },
- "⇍": { "codepoints": [8653], "characters": "\u21CD" },
- "≦̸": { "codepoints": [8806, 824], "characters": "\u2266\u0338" },
- "↚": { "codepoints": [8602], "characters": "\u219A" },
- "‥": { "codepoints": [8229], "characters": "\u2025" },
- "≰": { "codepoints": [8816], "characters": "\u2270" },
- "↚": { "codepoints": [8602], "characters": "\u219A" },
- "↮": { "codepoints": [8622], "characters": "\u21AE" },
- "≰": { "codepoints": [8816], "characters": "\u2270" },
- "≦̸": { "codepoints": [8806, 824], "characters": "\u2266\u0338" },
- "⩽̸": { "codepoints": [10877, 824], "characters": "\u2A7D\u0338" },
- "⩽̸": { "codepoints": [10877, 824], "characters": "\u2A7D\u0338" },
- "≮": { "codepoints": [8814], "characters": "\u226E" },
- "≴": { "codepoints": [8820], "characters": "\u2274" },
- "≮": { "codepoints": [8814], "characters": "\u226E" },
- "⋪": { "codepoints": [8938], "characters": "\u22EA" },
- "⋬": { "codepoints": [8940], "characters": "\u22EC" },
- "∤": { "codepoints": [8740], "characters": "\u2224" },
- "𝕟": { "codepoints": [120159], "characters": "\uD835\uDD5F" },
- "¬": { "codepoints": [172], "characters": "\u00AC" },
- "¬": { "codepoints": [172], "characters": "\u00AC" },
- "∉": { "codepoints": [8713], "characters": "\u2209" },
- "⋹̸": { "codepoints": [8953, 824], "characters": "\u22F9\u0338" },
- "⋵̸": { "codepoints": [8949, 824], "characters": "\u22F5\u0338" },
- "∉": { "codepoints": [8713], "characters": "\u2209" },
- "⋷": { "codepoints": [8951], "characters": "\u22F7" },
- "⋶": { "codepoints": [8950], "characters": "\u22F6" },
- "∌": { "codepoints": [8716], "characters": "\u220C" },
- "∌": { "codepoints": [8716], "characters": "\u220C" },
- "⋾": { "codepoints": [8958], "characters": "\u22FE" },
- "⋽": { "codepoints": [8957], "characters": "\u22FD" },
- "∦": { "codepoints": [8742], "characters": "\u2226" },
- "∦": { "codepoints": [8742], "characters": "\u2226" },
- "⫽⃥": { "codepoints": [11005, 8421], "characters": "\u2AFD\u20E5" },
- "∂̸": { "codepoints": [8706, 824], "characters": "\u2202\u0338" },
- "⨔": { "codepoints": [10772], "characters": "\u2A14" },
- "⊀": { "codepoints": [8832], "characters": "\u2280" },
- "⋠": { "codepoints": [8928], "characters": "\u22E0" },
- "⪯̸": { "codepoints": [10927, 824], "characters": "\u2AAF\u0338" },
- "⊀": { "codepoints": [8832], "characters": "\u2280" },
- "⪯̸": { "codepoints": [10927, 824], "characters": "\u2AAF\u0338" },
- "⇏": { "codepoints": [8655], "characters": "\u21CF" },
- "↛": { "codepoints": [8603], "characters": "\u219B" },
- "⤳̸": { "codepoints": [10547, 824], "characters": "\u2933\u0338" },
- "↝̸": { "codepoints": [8605, 824], "characters": "\u219D\u0338" },
- "↛": { "codepoints": [8603], "characters": "\u219B" },
- "⋫": { "codepoints": [8939], "characters": "\u22EB" },
- "⋭": { "codepoints": [8941], "characters": "\u22ED" },
- "⊁": { "codepoints": [8833], "characters": "\u2281" },
- "⋡": { "codepoints": [8929], "characters": "\u22E1" },
- "⪰̸": { "codepoints": [10928, 824], "characters": "\u2AB0\u0338" },
- "𝓃": { "codepoints": [120003], "characters": "\uD835\uDCC3" },
- "∤": { "codepoints": [8740], "characters": "\u2224" },
- "∦": { "codepoints": [8742], "characters": "\u2226" },
- "≁": { "codepoints": [8769], "characters": "\u2241" },
- "≄": { "codepoints": [8772], "characters": "\u2244" },
- "≄": { "codepoints": [8772], "characters": "\u2244" },
- "∤": { "codepoints": [8740], "characters": "\u2224" },
- "∦": { "codepoints": [8742], "characters": "\u2226" },
- "⋢": { "codepoints": [8930], "characters": "\u22E2" },
- "⋣": { "codepoints": [8931], "characters": "\u22E3" },
- "⊄": { "codepoints": [8836], "characters": "\u2284" },
- "⫅̸": { "codepoints": [10949, 824], "characters": "\u2AC5\u0338" },
- "⊈": { "codepoints": [8840], "characters": "\u2288" },
- "⊂⃒": { "codepoints": [8834, 8402], "characters": "\u2282\u20D2" },
- "⊈": { "codepoints": [8840], "characters": "\u2288" },
- "⫅̸": { "codepoints": [10949, 824], "characters": "\u2AC5\u0338" },
- "⊁": { "codepoints": [8833], "characters": "\u2281" },
- "⪰̸": { "codepoints": [10928, 824], "characters": "\u2AB0\u0338" },
- "⊅": { "codepoints": [8837], "characters": "\u2285" },
- "⫆̸": { "codepoints": [10950, 824], "characters": "\u2AC6\u0338" },
- "⊉": { "codepoints": [8841], "characters": "\u2289" },
- "⊃⃒": { "codepoints": [8835, 8402], "characters": "\u2283\u20D2" },
- "⊉": { "codepoints": [8841], "characters": "\u2289" },
- "⫆̸": { "codepoints": [10950, 824], "characters": "\u2AC6\u0338" },
- "≹": { "codepoints": [8825], "characters": "\u2279" },
- "ñ": { "codepoints": [241], "characters": "\u00F1" },
- "ñ": { "codepoints": [241], "characters": "\u00F1" },
- "≸": { "codepoints": [8824], "characters": "\u2278" },
- "⋪": { "codepoints": [8938], "characters": "\u22EA" },
- "⋬": { "codepoints": [8940], "characters": "\u22EC" },
- "⋫": { "codepoints": [8939], "characters": "\u22EB" },
- "⋭": { "codepoints": [8941], "characters": "\u22ED" },
- "ν": { "codepoints": [957], "characters": "\u03BD" },
- "#": { "codepoints": [35], "characters": "\u0023" },
- "№": { "codepoints": [8470], "characters": "\u2116" },
- " ": { "codepoints": [8199], "characters": "\u2007" },
- "⊭": { "codepoints": [8877], "characters": "\u22AD" },
- "⤄": { "codepoints": [10500], "characters": "\u2904" },
- "≍⃒": { "codepoints": [8781, 8402], "characters": "\u224D\u20D2" },
- "⊬": { "codepoints": [8876], "characters": "\u22AC" },
- "≥⃒": { "codepoints": [8805, 8402], "characters": "\u2265\u20D2" },
- ">⃒": { "codepoints": [62, 8402], "characters": "\u003E\u20D2" },
- "⧞": { "codepoints": [10718], "characters": "\u29DE" },
- "⤂": { "codepoints": [10498], "characters": "\u2902" },
- "≤⃒": { "codepoints": [8804, 8402], "characters": "\u2264\u20D2" },
- "<⃒": { "codepoints": [60, 8402], "characters": "\u003C\u20D2" },
- "⊴⃒": { "codepoints": [8884, 8402], "characters": "\u22B4\u20D2" },
- "⤃": { "codepoints": [10499], "characters": "\u2903" },
- "⊵⃒": { "codepoints": [8885, 8402], "characters": "\u22B5\u20D2" },
- "∼⃒": { "codepoints": [8764, 8402], "characters": "\u223C\u20D2" },
- "⇖": { "codepoints": [8662], "characters": "\u21D6" },
- "⤣": { "codepoints": [10531], "characters": "\u2923" },
- "↖": { "codepoints": [8598], "characters": "\u2196" },
- "↖": { "codepoints": [8598], "characters": "\u2196" },
- "⤧": { "codepoints": [10535], "characters": "\u2927" },
- "Ⓢ": { "codepoints": [9416], "characters": "\u24C8" },
- "ó": { "codepoints": [243], "characters": "\u00F3" },
- "ó": { "codepoints": [243], "characters": "\u00F3" },
- "⊛": { "codepoints": [8859], "characters": "\u229B" },
- "⊚": { "codepoints": [8858], "characters": "\u229A" },
- "ô": { "codepoints": [244], "characters": "\u00F4" },
- "ô": { "codepoints": [244], "characters": "\u00F4" },
- "о": { "codepoints": [1086], "characters": "\u043E" },
- "⊝": { "codepoints": [8861], "characters": "\u229D" },
- "ő": { "codepoints": [337], "characters": "\u0151" },
- "⨸": { "codepoints": [10808], "characters": "\u2A38" },
- "⊙": { "codepoints": [8857], "characters": "\u2299" },
- "⦼": { "codepoints": [10684], "characters": "\u29BC" },
- "œ": { "codepoints": [339], "characters": "\u0153" },
- "⦿": { "codepoints": [10687], "characters": "\u29BF" },
- "𝔬": { "codepoints": [120108], "characters": "\uD835\uDD2C" },
- "˛": { "codepoints": [731], "characters": "\u02DB" },
- "ò": { "codepoints": [242], "characters": "\u00F2" },
- "ò": { "codepoints": [242], "characters": "\u00F2" },
- "⧁": { "codepoints": [10689], "characters": "\u29C1" },
- "⦵": { "codepoints": [10677], "characters": "\u29B5" },
- "Ω": { "codepoints": [937], "characters": "\u03A9" },
- "∮": { "codepoints": [8750], "characters": "\u222E" },
- "↺": { "codepoints": [8634], "characters": "\u21BA" },
- "⦾": { "codepoints": [10686], "characters": "\u29BE" },
- "⦻": { "codepoints": [10683], "characters": "\u29BB" },
- "‾": { "codepoints": [8254], "characters": "\u203E" },
- "⧀": { "codepoints": [10688], "characters": "\u29C0" },
- "ō": { "codepoints": [333], "characters": "\u014D" },
- "ω": { "codepoints": [969], "characters": "\u03C9" },
- "ο": { "codepoints": [959], "characters": "\u03BF" },
- "⦶": { "codepoints": [10678], "characters": "\u29B6" },
- "⊖": { "codepoints": [8854], "characters": "\u2296" },
- "𝕠": { "codepoints": [120160], "characters": "\uD835\uDD60" },
- "⦷": { "codepoints": [10679], "characters": "\u29B7" },
- "⦹": { "codepoints": [10681], "characters": "\u29B9" },
- "⊕": { "codepoints": [8853], "characters": "\u2295" },
- "∨": { "codepoints": [8744], "characters": "\u2228" },
- "↻": { "codepoints": [8635], "characters": "\u21BB" },
- "⩝": { "codepoints": [10845], "characters": "\u2A5D" },
- "ℴ": { "codepoints": [8500], "characters": "\u2134" },
- "ℴ": { "codepoints": [8500], "characters": "\u2134" },
- "ª": { "codepoints": [170], "characters": "\u00AA" },
- "ª": { "codepoints": [170], "characters": "\u00AA" },
- "º": { "codepoints": [186], "characters": "\u00BA" },
- "º": { "codepoints": [186], "characters": "\u00BA" },
- "⊶": { "codepoints": [8886], "characters": "\u22B6" },
- "⩖": { "codepoints": [10838], "characters": "\u2A56" },
- "⩗": { "codepoints": [10839], "characters": "\u2A57" },
- "⩛": { "codepoints": [10843], "characters": "\u2A5B" },
- "ℴ": { "codepoints": [8500], "characters": "\u2134" },
- "ø": { "codepoints": [248], "characters": "\u00F8" },
- "ø": { "codepoints": [248], "characters": "\u00F8" },
- "⊘": { "codepoints": [8856], "characters": "\u2298" },
- "õ": { "codepoints": [245], "characters": "\u00F5" },
- "õ": { "codepoints": [245], "characters": "\u00F5" },
- "⊗": { "codepoints": [8855], "characters": "\u2297" },
- "⨶": { "codepoints": [10806], "characters": "\u2A36" },
- "ö": { "codepoints": [246], "characters": "\u00F6" },
- "ö": { "codepoints": [246], "characters": "\u00F6" },
- "⌽": { "codepoints": [9021], "characters": "\u233D" },
- "∥": { "codepoints": [8741], "characters": "\u2225" },
- "¶": { "codepoints": [182], "characters": "\u00B6" },
- "¶": { "codepoints": [182], "characters": "\u00B6" },
- "∥": { "codepoints": [8741], "characters": "\u2225" },
- "⫳": { "codepoints": [10995], "characters": "\u2AF3" },
- "⫽": { "codepoints": [11005], "characters": "\u2AFD" },
- "∂": { "codepoints": [8706], "characters": "\u2202" },
- "п": { "codepoints": [1087], "characters": "\u043F" },
- "%": { "codepoints": [37], "characters": "\u0025" },
- ".": { "codepoints": [46], "characters": "\u002E" },
- "‰": { "codepoints": [8240], "characters": "\u2030" },
- "⊥": { "codepoints": [8869], "characters": "\u22A5" },
- "‱": { "codepoints": [8241], "characters": "\u2031" },
- "𝔭": { "codepoints": [120109], "characters": "\uD835\uDD2D" },
- "φ": { "codepoints": [966], "characters": "\u03C6" },
- "ϕ": { "codepoints": [981], "characters": "\u03D5" },
- "ℳ": { "codepoints": [8499], "characters": "\u2133" },
- "☎": { "codepoints": [9742], "characters": "\u260E" },
- "π": { "codepoints": [960], "characters": "\u03C0" },
- "⋔": { "codepoints": [8916], "characters": "\u22D4" },
- "ϖ": { "codepoints": [982], "characters": "\u03D6" },
- "ℏ": { "codepoints": [8463], "characters": "\u210F" },
- "ℎ": { "codepoints": [8462], "characters": "\u210E" },
- "ℏ": { "codepoints": [8463], "characters": "\u210F" },
- "+": { "codepoints": [43], "characters": "\u002B" },
- "⨣": { "codepoints": [10787], "characters": "\u2A23" },
- "⊞": { "codepoints": [8862], "characters": "\u229E" },
- "⨢": { "codepoints": [10786], "characters": "\u2A22" },
- "∔": { "codepoints": [8724], "characters": "\u2214" },
- "⨥": { "codepoints": [10789], "characters": "\u2A25" },
- "⩲": { "codepoints": [10866], "characters": "\u2A72" },
- "±": { "codepoints": [177], "characters": "\u00B1" },
- "±": { "codepoints": [177], "characters": "\u00B1" },
- "⨦": { "codepoints": [10790], "characters": "\u2A26" },
- "⨧": { "codepoints": [10791], "characters": "\u2A27" },
- "±": { "codepoints": [177], "characters": "\u00B1" },
- "⨕": { "codepoints": [10773], "characters": "\u2A15" },
- "𝕡": { "codepoints": [120161], "characters": "\uD835\uDD61" },
- "£": { "codepoints": [163], "characters": "\u00A3" },
- "£": { "codepoints": [163], "characters": "\u00A3" },
- "≺": { "codepoints": [8826], "characters": "\u227A" },
- "⪳": { "codepoints": [10931], "characters": "\u2AB3" },
- "⪷": { "codepoints": [10935], "characters": "\u2AB7" },
- "≼": { "codepoints": [8828], "characters": "\u227C" },
- "⪯": { "codepoints": [10927], "characters": "\u2AAF" },
- "≺": { "codepoints": [8826], "characters": "\u227A" },
- "⪷": { "codepoints": [10935], "characters": "\u2AB7" },
- "≼": { "codepoints": [8828], "characters": "\u227C" },
- "⪯": { "codepoints": [10927], "characters": "\u2AAF" },
- "⪹": { "codepoints": [10937], "characters": "\u2AB9" },
- "⪵": { "codepoints": [10933], "characters": "\u2AB5" },
- "⋨": { "codepoints": [8936], "characters": "\u22E8" },
- "≾": { "codepoints": [8830], "characters": "\u227E" },
- "′": { "codepoints": [8242], "characters": "\u2032" },
- "ℙ": { "codepoints": [8473], "characters": "\u2119" },
- "⪵": { "codepoints": [10933], "characters": "\u2AB5" },
- "⪹": { "codepoints": [10937], "characters": "\u2AB9" },
- "⋨": { "codepoints": [8936], "characters": "\u22E8" },
- "∏": { "codepoints": [8719], "characters": "\u220F" },
- "⌮": { "codepoints": [9006], "characters": "\u232E" },
- "⌒": { "codepoints": [8978], "characters": "\u2312" },
- "⌓": { "codepoints": [8979], "characters": "\u2313" },
- "∝": { "codepoints": [8733], "characters": "\u221D" },
- "∝": { "codepoints": [8733], "characters": "\u221D" },
- "≾": { "codepoints": [8830], "characters": "\u227E" },
- "⊰": { "codepoints": [8880], "characters": "\u22B0" },
- "𝓅": { "codepoints": [120005], "characters": "\uD835\uDCC5" },
- "ψ": { "codepoints": [968], "characters": "\u03C8" },
- " ": { "codepoints": [8200], "characters": "\u2008" },
- "𝔮": { "codepoints": [120110], "characters": "\uD835\uDD2E" },
- "⨌": { "codepoints": [10764], "characters": "\u2A0C" },
- "𝕢": { "codepoints": [120162], "characters": "\uD835\uDD62" },
- "⁗": { "codepoints": [8279], "characters": "\u2057" },
- "𝓆": { "codepoints": [120006], "characters": "\uD835\uDCC6" },
- "ℍ": { "codepoints": [8461], "characters": "\u210D" },
- "⨖": { "codepoints": [10774], "characters": "\u2A16" },
- "?": { "codepoints": [63], "characters": "\u003F" },
- "≟": { "codepoints": [8799], "characters": "\u225F" },
- """: { "codepoints": [34], "characters": "\u0022" },
- """: { "codepoints": [34], "characters": "\u0022" },
- "⇛": { "codepoints": [8667], "characters": "\u21DB" },
- "⇒": { "codepoints": [8658], "characters": "\u21D2" },
- "⤜": { "codepoints": [10524], "characters": "\u291C" },
- "⤏": { "codepoints": [10511], "characters": "\u290F" },
- "⥤": { "codepoints": [10596], "characters": "\u2964" },
- "∽̱": { "codepoints": [8765, 817], "characters": "\u223D\u0331" },
- "ŕ": { "codepoints": [341], "characters": "\u0155" },
- "√": { "codepoints": [8730], "characters": "\u221A" },
- "⦳": { "codepoints": [10675], "characters": "\u29B3" },
- "⟩": { "codepoints": [10217], "characters": "\u27E9" },
- "⦒": { "codepoints": [10642], "characters": "\u2992" },
- "⦥": { "codepoints": [10661], "characters": "\u29A5" },
- "⟩": { "codepoints": [10217], "characters": "\u27E9" },
- "»": { "codepoints": [187], "characters": "\u00BB" },
- "»": { "codepoints": [187], "characters": "\u00BB" },
- "→": { "codepoints": [8594], "characters": "\u2192" },
- "⥵": { "codepoints": [10613], "characters": "\u2975" },
- "⇥": { "codepoints": [8677], "characters": "\u21E5" },
- "⤠": { "codepoints": [10528], "characters": "\u2920" },
- "⤳": { "codepoints": [10547], "characters": "\u2933" },
- "⤞": { "codepoints": [10526], "characters": "\u291E" },
- "↪": { "codepoints": [8618], "characters": "\u21AA" },
- "↬": { "codepoints": [8620], "characters": "\u21AC" },
- "⥅": { "codepoints": [10565], "characters": "\u2945" },
- "⥴": { "codepoints": [10612], "characters": "\u2974" },
- "↣": { "codepoints": [8611], "characters": "\u21A3" },
- "↝": { "codepoints": [8605], "characters": "\u219D" },
- "⤚": { "codepoints": [10522], "characters": "\u291A" },
- "∶": { "codepoints": [8758], "characters": "\u2236" },
- "ℚ": { "codepoints": [8474], "characters": "\u211A" },
- "⤍": { "codepoints": [10509], "characters": "\u290D" },
- "❳": { "codepoints": [10099], "characters": "\u2773" },
- "}": { "codepoints": [125], "characters": "\u007D" },
- "]": { "codepoints": [93], "characters": "\u005D" },
- "⦌": { "codepoints": [10636], "characters": "\u298C" },
- "⦎": { "codepoints": [10638], "characters": "\u298E" },
- "⦐": { "codepoints": [10640], "characters": "\u2990" },
- "ř": { "codepoints": [345], "characters": "\u0159" },
- "ŗ": { "codepoints": [343], "characters": "\u0157" },
- "⌉": { "codepoints": [8969], "characters": "\u2309" },
- "}": { "codepoints": [125], "characters": "\u007D" },
- "р": { "codepoints": [1088], "characters": "\u0440" },
- "⤷": { "codepoints": [10551], "characters": "\u2937" },
- "⥩": { "codepoints": [10601], "characters": "\u2969" },
- "”": { "codepoints": [8221], "characters": "\u201D" },
- "”": { "codepoints": [8221], "characters": "\u201D" },
- "↳": { "codepoints": [8627], "characters": "\u21B3" },
- "ℜ": { "codepoints": [8476], "characters": "\u211C" },
- "ℛ": { "codepoints": [8475], "characters": "\u211B" },
- "ℜ": { "codepoints": [8476], "characters": "\u211C" },
- "ℝ": { "codepoints": [8477], "characters": "\u211D" },
- "▭": { "codepoints": [9645], "characters": "\u25AD" },
- "®": { "codepoints": [174], "characters": "\u00AE" },
- "®": { "codepoints": [174], "characters": "\u00AE" },
- "⥽": { "codepoints": [10621], "characters": "\u297D" },
- "⌋": { "codepoints": [8971], "characters": "\u230B" },
- "𝔯": { "codepoints": [120111], "characters": "\uD835\uDD2F" },
- "⇁": { "codepoints": [8641], "characters": "\u21C1" },
- "⇀": { "codepoints": [8640], "characters": "\u21C0" },
- "⥬": { "codepoints": [10604], "characters": "\u296C" },
- "ρ": { "codepoints": [961], "characters": "\u03C1" },
- "ϱ": { "codepoints": [1009], "characters": "\u03F1" },
- "→": { "codepoints": [8594], "characters": "\u2192" },
- "↣": { "codepoints": [8611], "characters": "\u21A3" },
- "⇁": { "codepoints": [8641], "characters": "\u21C1" },
- "⇀": { "codepoints": [8640], "characters": "\u21C0" },
- "⇄": { "codepoints": [8644], "characters": "\u21C4" },
- "⇌": { "codepoints": [8652], "characters": "\u21CC" },
- "⇉": { "codepoints": [8649], "characters": "\u21C9" },
- "↝": { "codepoints": [8605], "characters": "\u219D" },
- "⋌": { "codepoints": [8908], "characters": "\u22CC" },
- "˚": { "codepoints": [730], "characters": "\u02DA" },
- "≓": { "codepoints": [8787], "characters": "\u2253" },
- "⇄": { "codepoints": [8644], "characters": "\u21C4" },
- "⇌": { "codepoints": [8652], "characters": "\u21CC" },
- "‏": { "codepoints": [8207], "characters": "\u200F" },
- "⎱": { "codepoints": [9137], "characters": "\u23B1" },
- "⎱": { "codepoints": [9137], "characters": "\u23B1" },
- "⫮": { "codepoints": [10990], "characters": "\u2AEE" },
- "⟭": { "codepoints": [10221], "characters": "\u27ED" },
- "⇾": { "codepoints": [8702], "characters": "\u21FE" },
- "⟧": { "codepoints": [10215], "characters": "\u27E7" },
- "⦆": { "codepoints": [10630], "characters": "\u2986" },
- "𝕣": { "codepoints": [120163], "characters": "\uD835\uDD63" },
- "⨮": { "codepoints": [10798], "characters": "\u2A2E" },
- "⨵": { "codepoints": [10805], "characters": "\u2A35" },
- ")": { "codepoints": [41], "characters": "\u0029" },
- "⦔": { "codepoints": [10644], "characters": "\u2994" },
- "⨒": { "codepoints": [10770], "characters": "\u2A12" },
- "⇉": { "codepoints": [8649], "characters": "\u21C9" },
- "›": { "codepoints": [8250], "characters": "\u203A" },
- "𝓇": { "codepoints": [120007], "characters": "\uD835\uDCC7" },
- "↱": { "codepoints": [8625], "characters": "\u21B1" },
- "]": { "codepoints": [93], "characters": "\u005D" },
- "’": { "codepoints": [8217], "characters": "\u2019" },
- "’": { "codepoints": [8217], "characters": "\u2019" },
- "⋌": { "codepoints": [8908], "characters": "\u22CC" },
- "⋊": { "codepoints": [8906], "characters": "\u22CA" },
- "▹": { "codepoints": [9657], "characters": "\u25B9" },
- "⊵": { "codepoints": [8885], "characters": "\u22B5" },
- "▸": { "codepoints": [9656], "characters": "\u25B8" },
- "⧎": { "codepoints": [10702], "characters": "\u29CE" },
- "⥨": { "codepoints": [10600], "characters": "\u2968" },
- "℞": { "codepoints": [8478], "characters": "\u211E" },
- "ś": { "codepoints": [347], "characters": "\u015B" },
- "‚": { "codepoints": [8218], "characters": "\u201A" },
- "≻": { "codepoints": [8827], "characters": "\u227B" },
- "⪴": { "codepoints": [10932], "characters": "\u2AB4" },
- "⪸": { "codepoints": [10936], "characters": "\u2AB8" },
- "š": { "codepoints": [353], "characters": "\u0161" },
- "≽": { "codepoints": [8829], "characters": "\u227D" },
- "⪰": { "codepoints": [10928], "characters": "\u2AB0" },
- "ş": { "codepoints": [351], "characters": "\u015F" },
- "ŝ": { "codepoints": [349], "characters": "\u015D" },
- "⪶": { "codepoints": [10934], "characters": "\u2AB6" },
- "⪺": { "codepoints": [10938], "characters": "\u2ABA" },
- "⋩": { "codepoints": [8937], "characters": "\u22E9" },
- "⨓": { "codepoints": [10771], "characters": "\u2A13" },
- "≿": { "codepoints": [8831], "characters": "\u227F" },
- "с": { "codepoints": [1089], "characters": "\u0441" },
- "⋅": { "codepoints": [8901], "characters": "\u22C5" },
- "⊡": { "codepoints": [8865], "characters": "\u22A1" },
- "⩦": { "codepoints": [10854], "characters": "\u2A66" },
- "⇘": { "codepoints": [8664], "characters": "\u21D8" },
- "⤥": { "codepoints": [10533], "characters": "\u2925" },
- "↘": { "codepoints": [8600], "characters": "\u2198" },
- "↘": { "codepoints": [8600], "characters": "\u2198" },
- "§": { "codepoints": [167], "characters": "\u00A7" },
- "§": { "codepoints": [167], "characters": "\u00A7" },
- ";": { "codepoints": [59], "characters": "\u003B" },
- "⤩": { "codepoints": [10537], "characters": "\u2929" },
- "∖": { "codepoints": [8726], "characters": "\u2216" },
- "∖": { "codepoints": [8726], "characters": "\u2216" },
- "✶": { "codepoints": [10038], "characters": "\u2736" },
- "𝔰": { "codepoints": [120112], "characters": "\uD835\uDD30" },
- "⌢": { "codepoints": [8994], "characters": "\u2322" },
- "♯": { "codepoints": [9839], "characters": "\u266F" },
- "щ": { "codepoints": [1097], "characters": "\u0449" },
- "ш": { "codepoints": [1096], "characters": "\u0448" },
- "∣": { "codepoints": [8739], "characters": "\u2223" },
- "∥": { "codepoints": [8741], "characters": "\u2225" },
- "­": { "codepoints": [173], "characters": "\u00AD" },
- "­": { "codepoints": [173], "characters": "\u00AD" },
- "σ": { "codepoints": [963], "characters": "\u03C3" },
- "ς": { "codepoints": [962], "characters": "\u03C2" },
- "ς": { "codepoints": [962], "characters": "\u03C2" },
- "∼": { "codepoints": [8764], "characters": "\u223C" },
- "⩪": { "codepoints": [10858], "characters": "\u2A6A" },
- "≃": { "codepoints": [8771], "characters": "\u2243" },
- "≃": { "codepoints": [8771], "characters": "\u2243" },
- "⪞": { "codepoints": [10910], "characters": "\u2A9E" },
- "⪠": { "codepoints": [10912], "characters": "\u2AA0" },
- "⪝": { "codepoints": [10909], "characters": "\u2A9D" },
- "⪟": { "codepoints": [10911], "characters": "\u2A9F" },
- "≆": { "codepoints": [8774], "characters": "\u2246" },
- "⨤": { "codepoints": [10788], "characters": "\u2A24" },
- "⥲": { "codepoints": [10610], "characters": "\u2972" },
- "←": { "codepoints": [8592], "characters": "\u2190" },
- "∖": { "codepoints": [8726], "characters": "\u2216" },
- "⨳": { "codepoints": [10803], "characters": "\u2A33" },
- "⧤": { "codepoints": [10724], "characters": "\u29E4" },
- "∣": { "codepoints": [8739], "characters": "\u2223" },
- "⌣": { "codepoints": [8995], "characters": "\u2323" },
- "⪪": { "codepoints": [10922], "characters": "\u2AAA" },
- "⪬": { "codepoints": [10924], "characters": "\u2AAC" },
- "⪬︀": { "codepoints": [10924, 65024], "characters": "\u2AAC\uFE00" },
- "ь": { "codepoints": [1100], "characters": "\u044C" },
- "/": { "codepoints": [47], "characters": "\u002F" },
- "⧄": { "codepoints": [10692], "characters": "\u29C4" },
- "⌿": { "codepoints": [9023], "characters": "\u233F" },
- "𝕤": { "codepoints": [120164], "characters": "\uD835\uDD64" },
- "♠": { "codepoints": [9824], "characters": "\u2660" },
- "♠": { "codepoints": [9824], "characters": "\u2660" },
- "∥": { "codepoints": [8741], "characters": "\u2225" },
- "⊓": { "codepoints": [8851], "characters": "\u2293" },
- "⊓︀": { "codepoints": [8851, 65024], "characters": "\u2293\uFE00" },
- "⊔": { "codepoints": [8852], "characters": "\u2294" },
- "⊔︀": { "codepoints": [8852, 65024], "characters": "\u2294\uFE00" },
- "⊏": { "codepoints": [8847], "characters": "\u228F" },
- "⊑": { "codepoints": [8849], "characters": "\u2291" },
- "⊏": { "codepoints": [8847], "characters": "\u228F" },
- "⊑": { "codepoints": [8849], "characters": "\u2291" },
- "⊐": { "codepoints": [8848], "characters": "\u2290" },
- "⊒": { "codepoints": [8850], "characters": "\u2292" },
- "⊐": { "codepoints": [8848], "characters": "\u2290" },
- "⊒": { "codepoints": [8850], "characters": "\u2292" },
- "□": { "codepoints": [9633], "characters": "\u25A1" },
- "□": { "codepoints": [9633], "characters": "\u25A1" },
- "▪": { "codepoints": [9642], "characters": "\u25AA" },
- "▪": { "codepoints": [9642], "characters": "\u25AA" },
- "→": { "codepoints": [8594], "characters": "\u2192" },
- "𝓈": { "codepoints": [120008], "characters": "\uD835\uDCC8" },
- "∖": { "codepoints": [8726], "characters": "\u2216" },
- "⌣": { "codepoints": [8995], "characters": "\u2323" },
- "⋆": { "codepoints": [8902], "characters": "\u22C6" },
- "☆": { "codepoints": [9734], "characters": "\u2606" },
- "★": { "codepoints": [9733], "characters": "\u2605" },
- "ϵ": { "codepoints": [1013], "characters": "\u03F5" },
- "ϕ": { "codepoints": [981], "characters": "\u03D5" },
- "¯": { "codepoints": [175], "characters": "\u00AF" },
- "⊂": { "codepoints": [8834], "characters": "\u2282" },
- "⫅": { "codepoints": [10949], "characters": "\u2AC5" },
- "⪽": { "codepoints": [10941], "characters": "\u2ABD" },
- "⊆": { "codepoints": [8838], "characters": "\u2286" },
- "⫃": { "codepoints": [10947], "characters": "\u2AC3" },
- "⫁": { "codepoints": [10945], "characters": "\u2AC1" },
- "⫋": { "codepoints": [10955], "characters": "\u2ACB" },
- "⊊": { "codepoints": [8842], "characters": "\u228A" },
- "⪿": { "codepoints": [10943], "characters": "\u2ABF" },
- "⥹": { "codepoints": [10617], "characters": "\u2979" },
- "⊂": { "codepoints": [8834], "characters": "\u2282" },
- "⊆": { "codepoints": [8838], "characters": "\u2286" },
- "⫅": { "codepoints": [10949], "characters": "\u2AC5" },
- "⊊": { "codepoints": [8842], "characters": "\u228A" },
- "⫋": { "codepoints": [10955], "characters": "\u2ACB" },
- "⫇": { "codepoints": [10951], "characters": "\u2AC7" },
- "⫕": { "codepoints": [10965], "characters": "\u2AD5" },
- "⫓": { "codepoints": [10963], "characters": "\u2AD3" },
- "≻": { "codepoints": [8827], "characters": "\u227B" },
- "⪸": { "codepoints": [10936], "characters": "\u2AB8" },
- "≽": { "codepoints": [8829], "characters": "\u227D" },
- "⪰": { "codepoints": [10928], "characters": "\u2AB0" },
- "⪺": { "codepoints": [10938], "characters": "\u2ABA" },
- "⪶": { "codepoints": [10934], "characters": "\u2AB6" },
- "⋩": { "codepoints": [8937], "characters": "\u22E9" },
- "≿": { "codepoints": [8831], "characters": "\u227F" },
- "∑": { "codepoints": [8721], "characters": "\u2211" },
- "♪": { "codepoints": [9834], "characters": "\u266A" },
- "¹": { "codepoints": [185], "characters": "\u00B9" },
- "¹": { "codepoints": [185], "characters": "\u00B9" },
- "²": { "codepoints": [178], "characters": "\u00B2" },
- "²": { "codepoints": [178], "characters": "\u00B2" },
- "³": { "codepoints": [179], "characters": "\u00B3" },
- "³": { "codepoints": [179], "characters": "\u00B3" },
- "⊃": { "codepoints": [8835], "characters": "\u2283" },
- "⫆": { "codepoints": [10950], "characters": "\u2AC6" },
- "⪾": { "codepoints": [10942], "characters": "\u2ABE" },
- "⫘": { "codepoints": [10968], "characters": "\u2AD8" },
- "⊇": { "codepoints": [8839], "characters": "\u2287" },
- "⫄": { "codepoints": [10948], "characters": "\u2AC4" },
- "⟉": { "codepoints": [10185], "characters": "\u27C9" },
- "⫗": { "codepoints": [10967], "characters": "\u2AD7" },
- "⥻": { "codepoints": [10619], "characters": "\u297B" },
- "⫂": { "codepoints": [10946], "characters": "\u2AC2" },
- "⫌": { "codepoints": [10956], "characters": "\u2ACC" },
- "⊋": { "codepoints": [8843], "characters": "\u228B" },
- "⫀": { "codepoints": [10944], "characters": "\u2AC0" },
- "⊃": { "codepoints": [8835], "characters": "\u2283" },
- "⊇": { "codepoints": [8839], "characters": "\u2287" },
- "⫆": { "codepoints": [10950], "characters": "\u2AC6" },
- "⊋": { "codepoints": [8843], "characters": "\u228B" },
- "⫌": { "codepoints": [10956], "characters": "\u2ACC" },
- "⫈": { "codepoints": [10952], "characters": "\u2AC8" },
- "⫔": { "codepoints": [10964], "characters": "\u2AD4" },
- "⫖": { "codepoints": [10966], "characters": "\u2AD6" },
- "⇙": { "codepoints": [8665], "characters": "\u21D9" },
- "⤦": { "codepoints": [10534], "characters": "\u2926" },
- "↙": { "codepoints": [8601], "characters": "\u2199" },
- "↙": { "codepoints": [8601], "characters": "\u2199" },
- "⤪": { "codepoints": [10538], "characters": "\u292A" },
- "ß": { "codepoints": [223], "characters": "\u00DF" },
- "ß": { "codepoints": [223], "characters": "\u00DF" },
- "⌖": { "codepoints": [8982], "characters": "\u2316" },
- "τ": { "codepoints": [964], "characters": "\u03C4" },
- "⎴": { "codepoints": [9140], "characters": "\u23B4" },
- "ť": { "codepoints": [357], "characters": "\u0165" },
- "ţ": { "codepoints": [355], "characters": "\u0163" },
- "т": { "codepoints": [1090], "characters": "\u0442" },
- "⃛": { "codepoints": [8411], "characters": "\u20DB" },
- "⌕": { "codepoints": [8981], "characters": "\u2315" },
- "𝔱": { "codepoints": [120113], "characters": "\uD835\uDD31" },
- "∴": { "codepoints": [8756], "characters": "\u2234" },
- "∴": { "codepoints": [8756], "characters": "\u2234" },
- "θ": { "codepoints": [952], "characters": "\u03B8" },
- "ϑ": { "codepoints": [977], "characters": "\u03D1" },
- "ϑ": { "codepoints": [977], "characters": "\u03D1" },
- "≈": { "codepoints": [8776], "characters": "\u2248" },
- "∼": { "codepoints": [8764], "characters": "\u223C" },
- " ": { "codepoints": [8201], "characters": "\u2009" },
- "≈": { "codepoints": [8776], "characters": "\u2248" },
- "∼": { "codepoints": [8764], "characters": "\u223C" },
- "þ": { "codepoints": [254], "characters": "\u00FE" },
- "þ": { "codepoints": [254], "characters": "\u00FE" },
- "˜": { "codepoints": [732], "characters": "\u02DC" },
- "×": { "codepoints": [215], "characters": "\u00D7" },
- "×": { "codepoints": [215], "characters": "\u00D7" },
- "⊠": { "codepoints": [8864], "characters": "\u22A0" },
- "⨱": { "codepoints": [10801], "characters": "\u2A31" },
- "⨰": { "codepoints": [10800], "characters": "\u2A30" },
- "∭": { "codepoints": [8749], "characters": "\u222D" },
- "⤨": { "codepoints": [10536], "characters": "\u2928" },
- "⊤": { "codepoints": [8868], "characters": "\u22A4" },
- "⌶": { "codepoints": [9014], "characters": "\u2336" },
- "⫱": { "codepoints": [10993], "characters": "\u2AF1" },
- "𝕥": { "codepoints": [120165], "characters": "\uD835\uDD65" },
- "⫚": { "codepoints": [10970], "characters": "\u2ADA" },
- "⤩": { "codepoints": [10537], "characters": "\u2929" },
- "‴": { "codepoints": [8244], "characters": "\u2034" },
- "™": { "codepoints": [8482], "characters": "\u2122" },
- "▵": { "codepoints": [9653], "characters": "\u25B5" },
- "▿": { "codepoints": [9663], "characters": "\u25BF" },
- "◃": { "codepoints": [9667], "characters": "\u25C3" },
- "⊴": { "codepoints": [8884], "characters": "\u22B4" },
- "≜": { "codepoints": [8796], "characters": "\u225C" },
- "▹": { "codepoints": [9657], "characters": "\u25B9" },
- "⊵": { "codepoints": [8885], "characters": "\u22B5" },
- "◬": { "codepoints": [9708], "characters": "\u25EC" },
- "≜": { "codepoints": [8796], "characters": "\u225C" },
- "⨺": { "codepoints": [10810], "characters": "\u2A3A" },
- "⨹": { "codepoints": [10809], "characters": "\u2A39" },
- "⧍": { "codepoints": [10701], "characters": "\u29CD" },
- "⨻": { "codepoints": [10811], "characters": "\u2A3B" },
- "⏢": { "codepoints": [9186], "characters": "\u23E2" },
- "𝓉": { "codepoints": [120009], "characters": "\uD835\uDCC9" },
- "ц": { "codepoints": [1094], "characters": "\u0446" },
- "ћ": { "codepoints": [1115], "characters": "\u045B" },
- "ŧ": { "codepoints": [359], "characters": "\u0167" },
- "≬": { "codepoints": [8812], "characters": "\u226C" },
- "↞": { "codepoints": [8606], "characters": "\u219E" },
- "↠": { "codepoints": [8608], "characters": "\u21A0" },
- "⇑": { "codepoints": [8657], "characters": "\u21D1" },
- "⥣": { "codepoints": [10595], "characters": "\u2963" },
- "ú": { "codepoints": [250], "characters": "\u00FA" },
- "ú": { "codepoints": [250], "characters": "\u00FA" },
- "↑": { "codepoints": [8593], "characters": "\u2191" },
- "ў": { "codepoints": [1118], "characters": "\u045E" },
- "ŭ": { "codepoints": [365], "characters": "\u016D" },
- "û": { "codepoints": [251], "characters": "\u00FB" },
- "û": { "codepoints": [251], "characters": "\u00FB" },
- "у": { "codepoints": [1091], "characters": "\u0443" },
- "⇅": { "codepoints": [8645], "characters": "\u21C5" },
- "ű": { "codepoints": [369], "characters": "\u0171" },
- "⥮": { "codepoints": [10606], "characters": "\u296E" },
- "⥾": { "codepoints": [10622], "characters": "\u297E" },
- "𝔲": { "codepoints": [120114], "characters": "\uD835\uDD32" },
- "ù": { "codepoints": [249], "characters": "\u00F9" },
- "ù": { "codepoints": [249], "characters": "\u00F9" },
- "↿": { "codepoints": [8639], "characters": "\u21BF" },
- "↾": { "codepoints": [8638], "characters": "\u21BE" },
- "▀": { "codepoints": [9600], "characters": "\u2580" },
- "⌜": { "codepoints": [8988], "characters": "\u231C" },
- "⌜": { "codepoints": [8988], "characters": "\u231C" },
- "⌏": { "codepoints": [8975], "characters": "\u230F" },
- "◸": { "codepoints": [9720], "characters": "\u25F8" },
- "ū": { "codepoints": [363], "characters": "\u016B" },
- "¨": { "codepoints": [168], "characters": "\u00A8" },
- "¨": { "codepoints": [168], "characters": "\u00A8" },
- "ų": { "codepoints": [371], "characters": "\u0173" },
- "𝕦": { "codepoints": [120166], "characters": "\uD835\uDD66" },
- "↑": { "codepoints": [8593], "characters": "\u2191" },
- "↕": { "codepoints": [8597], "characters": "\u2195" },
- "↿": { "codepoints": [8639], "characters": "\u21BF" },
- "↾": { "codepoints": [8638], "characters": "\u21BE" },
- "⊎": { "codepoints": [8846], "characters": "\u228E" },
- "υ": { "codepoints": [965], "characters": "\u03C5" },
- "ϒ": { "codepoints": [978], "characters": "\u03D2" },
- "υ": { "codepoints": [965], "characters": "\u03C5" },
- "⇈": { "codepoints": [8648], "characters": "\u21C8" },
- "⌝": { "codepoints": [8989], "characters": "\u231D" },
- "⌝": { "codepoints": [8989], "characters": "\u231D" },
- "⌎": { "codepoints": [8974], "characters": "\u230E" },
- "ů": { "codepoints": [367], "characters": "\u016F" },
- "◹": { "codepoints": [9721], "characters": "\u25F9" },
- "𝓊": { "codepoints": [120010], "characters": "\uD835\uDCCA" },
- "⋰": { "codepoints": [8944], "characters": "\u22F0" },
- "ũ": { "codepoints": [361], "characters": "\u0169" },
- "▵": { "codepoints": [9653], "characters": "\u25B5" },
- "▴": { "codepoints": [9652], "characters": "\u25B4" },
- "⇈": { "codepoints": [8648], "characters": "\u21C8" },
- "ü": { "codepoints": [252], "characters": "\u00FC" },
- "ü": { "codepoints": [252], "characters": "\u00FC" },
- "⦧": { "codepoints": [10663], "characters": "\u29A7" },
- "⇕": { "codepoints": [8661], "characters": "\u21D5" },
- "⫨": { "codepoints": [10984], "characters": "\u2AE8" },
- "⫩": { "codepoints": [10985], "characters": "\u2AE9" },
- "⊨": { "codepoints": [8872], "characters": "\u22A8" },
- "⦜": { "codepoints": [10652], "characters": "\u299C" },
- "ϵ": { "codepoints": [1013], "characters": "\u03F5" },
- "ϰ": { "codepoints": [1008], "characters": "\u03F0" },
- "∅": { "codepoints": [8709], "characters": "\u2205" },
- "ϕ": { "codepoints": [981], "characters": "\u03D5" },
- "ϖ": { "codepoints": [982], "characters": "\u03D6" },
- "∝": { "codepoints": [8733], "characters": "\u221D" },
- "↕": { "codepoints": [8597], "characters": "\u2195" },
- "ϱ": { "codepoints": [1009], "characters": "\u03F1" },
- "ς": { "codepoints": [962], "characters": "\u03C2" },
- "⊊︀": { "codepoints": [8842, 65024], "characters": "\u228A\uFE00" },
- "⫋︀": { "codepoints": [10955, 65024], "characters": "\u2ACB\uFE00" },
- "⊋︀": { "codepoints": [8843, 65024], "characters": "\u228B\uFE00" },
- "⫌︀": { "codepoints": [10956, 65024], "characters": "\u2ACC\uFE00" },
- "ϑ": { "codepoints": [977], "characters": "\u03D1" },
- "⊲": { "codepoints": [8882], "characters": "\u22B2" },
- "⊳": { "codepoints": [8883], "characters": "\u22B3" },
- "в": { "codepoints": [1074], "characters": "\u0432" },
- "⊢": { "codepoints": [8866], "characters": "\u22A2" },
- "∨": { "codepoints": [8744], "characters": "\u2228" },
- "⊻": { "codepoints": [8891], "characters": "\u22BB" },
- "≚": { "codepoints": [8794], "characters": "\u225A" },
- "⋮": { "codepoints": [8942], "characters": "\u22EE" },
- "|": { "codepoints": [124], "characters": "\u007C" },
- "|": { "codepoints": [124], "characters": "\u007C" },
- "𝔳": { "codepoints": [120115], "characters": "\uD835\uDD33" },
- "⊲": { "codepoints": [8882], "characters": "\u22B2" },
- "⊂⃒": { "codepoints": [8834, 8402], "characters": "\u2282\u20D2" },
- "⊃⃒": { "codepoints": [8835, 8402], "characters": "\u2283\u20D2" },
- "𝕧": { "codepoints": [120167], "characters": "\uD835\uDD67" },
- "∝": { "codepoints": [8733], "characters": "\u221D" },
- "⊳": { "codepoints": [8883], "characters": "\u22B3" },
- "𝓋": { "codepoints": [120011], "characters": "\uD835\uDCCB" },
- "⫋︀": { "codepoints": [10955, 65024], "characters": "\u2ACB\uFE00" },
- "⊊︀": { "codepoints": [8842, 65024], "characters": "\u228A\uFE00" },
- "⫌︀": { "codepoints": [10956, 65024], "characters": "\u2ACC\uFE00" },
- "⊋︀": { "codepoints": [8843, 65024], "characters": "\u228B\uFE00" },
- "⦚": { "codepoints": [10650], "characters": "\u299A" },
- "ŵ": { "codepoints": [373], "characters": "\u0175" },
- "⩟": { "codepoints": [10847], "characters": "\u2A5F" },
- "∧": { "codepoints": [8743], "characters": "\u2227" },
- "≙": { "codepoints": [8793], "characters": "\u2259" },
- "℘": { "codepoints": [8472], "characters": "\u2118" },
- "𝔴": { "codepoints": [120116], "characters": "\uD835\uDD34" },
- "𝕨": { "codepoints": [120168], "characters": "\uD835\uDD68" },
- "℘": { "codepoints": [8472], "characters": "\u2118" },
- "≀": { "codepoints": [8768], "characters": "\u2240" },
- "≀": { "codepoints": [8768], "characters": "\u2240" },
- "𝓌": { "codepoints": [120012], "characters": "\uD835\uDCCC" },
- "⋂": { "codepoints": [8898], "characters": "\u22C2" },
- "◯": { "codepoints": [9711], "characters": "\u25EF" },
- "⋃": { "codepoints": [8899], "characters": "\u22C3" },
- "▽": { "codepoints": [9661], "characters": "\u25BD" },
- "𝔵": { "codepoints": [120117], "characters": "\uD835\uDD35" },
- "⟺": { "codepoints": [10234], "characters": "\u27FA" },
- "⟷": { "codepoints": [10231], "characters": "\u27F7" },
- "ξ": { "codepoints": [958], "characters": "\u03BE" },
- "⟸": { "codepoints": [10232], "characters": "\u27F8" },
- "⟵": { "codepoints": [10229], "characters": "\u27F5" },
- "⟼": { "codepoints": [10236], "characters": "\u27FC" },
- "⋻": { "codepoints": [8955], "characters": "\u22FB" },
- "⨀": { "codepoints": [10752], "characters": "\u2A00" },
- "𝕩": { "codepoints": [120169], "characters": "\uD835\uDD69" },
- "⨁": { "codepoints": [10753], "characters": "\u2A01" },
- "⨂": { "codepoints": [10754], "characters": "\u2A02" },
- "⟹": { "codepoints": [10233], "characters": "\u27F9" },
- "⟶": { "codepoints": [10230], "characters": "\u27F6" },
- "𝓍": { "codepoints": [120013], "characters": "\uD835\uDCCD" },
- "⨆": { "codepoints": [10758], "characters": "\u2A06" },
- "⨄": { "codepoints": [10756], "characters": "\u2A04" },
- "△": { "codepoints": [9651], "characters": "\u25B3" },
- "⋁": { "codepoints": [8897], "characters": "\u22C1" },
- "⋀": { "codepoints": [8896], "characters": "\u22C0" },
- "ý": { "codepoints": [253], "characters": "\u00FD" },
- "ý": { "codepoints": [253], "characters": "\u00FD" },
- "я": { "codepoints": [1103], "characters": "\u044F" },
- "ŷ": { "codepoints": [375], "characters": "\u0177" },
- "ы": { "codepoints": [1099], "characters": "\u044B" },
- "¥": { "codepoints": [165], "characters": "\u00A5" },
- "¥": { "codepoints": [165], "characters": "\u00A5" },
- "𝔶": { "codepoints": [120118], "characters": "\uD835\uDD36" },
- "ї": { "codepoints": [1111], "characters": "\u0457" },
- "𝕪": { "codepoints": [120170], "characters": "\uD835\uDD6A" },
- "𝓎": { "codepoints": [120014], "characters": "\uD835\uDCCE" },
- "ю": { "codepoints": [1102], "characters": "\u044E" },
- "ÿ": { "codepoints": [255], "characters": "\u00FF" },
- "ÿ": { "codepoints": [255], "characters": "\u00FF" },
- "ź": { "codepoints": [378], "characters": "\u017A" },
- "ž": { "codepoints": [382], "characters": "\u017E" },
- "з": { "codepoints": [1079], "characters": "\u0437" },
- "ż": { "codepoints": [380], "characters": "\u017C" },
- "ℨ": { "codepoints": [8488], "characters": "\u2128" },
- "ζ": { "codepoints": [950], "characters": "\u03B6" },
- "𝔷": { "codepoints": [120119], "characters": "\uD835\uDD37" },
- "ж": { "codepoints": [1078], "characters": "\u0436" },
- "⇝": { "codepoints": [8669], "characters": "\u21DD" },
- "𝕫": { "codepoints": [120171], "characters": "\uD835\uDD6B" },
- "𝓏": { "codepoints": [120015], "characters": "\uD835\uDCCF" },
- "‍": { "codepoints": [8205], "characters": "\u200D" },
- "‌": { "codepoints": [8204], "characters": "\u200C" }
-}
+++ /dev/null
-! Copyright (C) 2020 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: multiline tools.test html5 ;
-IN: html5.tests
-
-![===[
-{ } [ "&" parse-html5 ] unit-test
-
-
-[[ <!DOCTYPE html>
-<html>
-<head>
-<title>Title</title>
-</head>
-
-<body>
-The content
-</body>
-
-</html>]] parse-html5
-
-
-]===]
\ No newline at end of file
+++ /dev/null
-! Copyright (C) 2020 Doug Coleman.
-! See http://factorcode.org/license.txt for BSD license.
-USING: accessors arrays assocs combinators
-combinators.short-circuit io io.encodings.utf8 io.files
-json.reader kernel math math.order memoize modern.slices
-prettyprint sequences sequences.extras strings suffix-arrays
-words ;
-IN: html5
-
-: 1sbuf ( ch -- sbuf ) [ SBUF" " clone ] dip over push ; inline
-: ?1sbuf ( ch -- sbuf ) [ SBUF" " clone ] dip [ over push ] when* ; inline
-
-! https://html.spec.whatwg.org/multipage/parsing.html#tokenization
-
-! https://infra.spec.whatwg.org/#namespaces
-CONSTANT: html-namespace "http://www.w3.org/1999/xhtml"
-CONSTANT: mathml-namespace "http://www.w3.org/1998/Math/MathML"
-CONSTANT: svg-namespace "http://www.w3.org/2000/svg"
-CONSTANT: xlink-namespace "http://www.w3.org/1999/xlink"
-CONSTANT: xml-namespace "http://www.w3.org/XML/1998/namespace"
-CONSTANT: xmlns-namespace "http://www.w3.org/2000/xmlns/"
-
-DEFER: data-state
-DEFER: (data-state)
-DEFER: rcdata-state
-DEFER: (rcdata-state)
-DEFER: rawtext-state
-DEFER: (rawtext-state)
-DEFER: script-data-state
-DEFER: (script-data-state)
-DEFER: plaintext-state
-DEFER: (plaintext-state)
-DEFER: tag-open-state
-DEFER: (tag-open-state)
-DEFER: end-tag-open-state
-DEFER: (end-tag-open-state)
-DEFER: tag-name-state
-DEFER: (tag-name-state)
-DEFER: rcdata-less-than-sign-state
-DEFER: (rcdata-less-than-sign-state)
-DEFER: rcdata-end-tag-open-state
-DEFER: (rcdata-end-tag-open-state)
-DEFER: rcdata-end-tag-name-state
-DEFER: (rcdata-end-tag-name-state)
-DEFER: rawtext-less-than-sign-state
-DEFER: (rawtext-less-than-sign-state)
-DEFER: rawtext-end-tag-open-state
-DEFER: (rawtext-end-tag-open-state)
-DEFER: rawtext-end-tag-name-state
-DEFER: (rawtext-end-tag-name-state)
-DEFER: script-data-less-than-sign-state
-DEFER: (script-data-less-than-sign-state)
-DEFER: script-data-end-tag-open-state
-DEFER: (script-data-end-tag-open-state)
-DEFER: script-data-end-tag-name-state
-DEFER: (script-data-end-tag-name-state)
-DEFER: script-data-escape-start-state
-DEFER: (script-data-escape-start-state)
-DEFER: script-data-escape-start-dash-state
-DEFER: (script-data-escape-start-dash-state)
-DEFER: script-data-escaped-state
-DEFER: (script-data-escaped-state)
-DEFER: script-data-escaped-dash-state
-DEFER: (script-data-escaped-dash-state)
-DEFER: script-data-escaped-dash-dash-state
-DEFER: (script-data-escaped-dash-dash-state)
-DEFER: script-data-escaped-less-than-sign-state
-DEFER: (script-data-escaped-less-than-sign-state)
-DEFER: script-data-escaped-end-tag-open-state
-DEFER: (script-data-escaped-end-tag-open-state)
-DEFER: script-data-escaped-end-tag-name-state
-DEFER: (script-data-escaped-end-tag-name-state)
-DEFER: script-data-double-escape-start-state
-DEFER: (script-data-double-escape-start-state)
-DEFER: script-data-double-escaped-state
-DEFER: (script-data-double-escaped-state)
-DEFER: script-data-double-escaped-dash-state
-DEFER: (script-data-double-escaped-dash-state)
-DEFER: script-data-double-escaped-dash-dash-state
-DEFER: (script-data-double-escaped-dash-dash-state)
-DEFER: script-data-double-escaped-less-than-sign-state
-DEFER: (script-data-double-escaped-less-than-sign-state)
-DEFER: script-data-double-escape-end-state
-DEFER: (script-data-double-escape-end-state)
-DEFER: before-attribute-name-state
-DEFER: (before-attribute-name-state)
-DEFER: attribute-name-state
-DEFER: (attribute-name-state)
-DEFER: after-attribute-name-state
-DEFER: (after-attribute-name-state)
-DEFER: before-attribute-value-state
-DEFER: (before-attribute-value-state)
-DEFER: attribute-value-double-quoted-state
-DEFER: (attribute-value-double-quoted-state)
-DEFER: attribute-value-single-quoted-state
-DEFER: (attribute-value-single-quoted-state)
-DEFER: attribute-value-unquoted-state
-DEFER: (attribute-value-unquoted-state)
-DEFER: after-attribute-value-quoted-state
-DEFER: (after-attribute-value-quoted-state)
-DEFER: self-closing-start-tag-state
-DEFER: (self-closing-start-tag-state)
-DEFER: bogus-comment-state
-DEFER: (bogus-comment-state)
-DEFER: markup-declaration-open-state
-DEFER: (markup-declaration-open-state)
-DEFER: comment-start-state
-DEFER: (comment-start-state)
-DEFER: comment-start-dash-state
-DEFER: (comment-start-dash-state)
-DEFER: comment-state
-DEFER: (comment-state)
-DEFER: comment-less-than-sign-state
-DEFER: (comment-less-than-sign-state)
-DEFER: comment-less-than-sign-bang-state
-DEFER: (comment-less-than-sign-bang-state)
-DEFER: comment-less-than-sign-bang-dash-state
-DEFER: (comment-less-than-sign-bang-dash-state)
-DEFER: comment-less-than-sign-bang-dash-dash-state
-DEFER: (comment-less-than-sign-bang-dash-dash-state)
-DEFER: comment-end-dash-state
-DEFER: (comment-end-dash-state)
-DEFER: comment-end-state
-DEFER: (comment-end-state)
-DEFER: comment-end-bang-state
-DEFER: (comment-end-bang-state)
-DEFER: doctype-state
-DEFER: (doctype-state)
-DEFER: before-doctype-name-state
-DEFER: (before-doctype-name-state)
-DEFER: doctype-name-state
-DEFER: (doctype-name-state)
-DEFER: after-doctype-name-state
-DEFER: (after-doctype-name-state)
-DEFER: after-doctype-public-keyword-state
-DEFER: (after-doctype-public-keyword-state)
-DEFER: before-doctype-public-identifier-state
-DEFER: (before-doctype-public-identifier-state)
-DEFER: doctype-public-identifier-double-quoted-state
-DEFER: (doctype-public-identifier-double-quoted-state)
-DEFER: doctype-public-identifier-single-quoted-state
-DEFER: (doctype-public-identifier-single-quoted-state)
-DEFER: after-doctype-public-identifier-state
-DEFER: (after-doctype-public-identifier-state)
-DEFER: between-doctype-public-and-system-identifiers-state
-DEFER: (between-doctype-public-and-system-identifiers-state)
-DEFER: after-doctype-system-keyword-state
-DEFER: (after-doctype-system-keyword-state)
-DEFER: before-doctype-system-identifier-state
-DEFER: (before-doctype-system-identifier-state)
-DEFER: doctype-system-identifier-double-quoted-state
-DEFER: (doctype-system-identifier-double-quoted-state)
-DEFER: doctype-system-identifier-single-quoted-state
-DEFER: (doctype-system-identifier-single-quoted-state)
-DEFER: after-doctype-system-identifier-state
-DEFER: (after-doctype-system-identifier-state)
-DEFER: bogus-doctype-state
-DEFER: (bogus-doctype-state)
-DEFER: cdata-section-state
-DEFER: (cdata-section-state)
-DEFER: cdata-section-bracket-state
-DEFER: (cdata-section-bracket-state)
-DEFER: cdata-section-end-state
-DEFER: (cdata-section-end-state)
-DEFER: character-reference-state
-DEFER: (character-reference-state)
-DEFER: named-character-reference-state
-DEFER: (named-character-reference-state)
-DEFER: ambiguous-ampersand-state
-DEFER: (ambiguous-ampersand-state)
-DEFER: numeric-character-reference-state
-DEFER: (numeric-character-reference-state)
-DEFER: hexadecimal-character-reference-start-state
-DEFER: (hexadecimal-character-reference-start-state)
-DEFER: decimal-character-reference-start-state
-DEFER: (decimal-character-reference-start-state)
-DEFER: hexadecimal-character-reference-state
-DEFER: (hexadecimal-character-reference-state)
-DEFER: decimal-character-reference-state
-DEFER: (decimal-character-reference-state)
-DEFER: numeric-character-reference-end-state
-DEFER: (numeric-character-reference-end-state)
-
-
-ERROR: unimplemented string ;
-ERROR: unimplemented* ;
-
-! Errors: https://html.spec.whatwg.org/multipage/parsing.html#parse-errors
-ERROR: abrupt-closing-of-empty-comment ;
-ERROR: abrupt-doctype-public-identifier ;
-ERROR: abrupt-doctype-system-identifier ;
-ERROR: absence-of-digits-in-numeric-character-reference ;
-ERROR: cdata-in-html-content ;
-ERROR: character-reference-outside-unicode-range ;
-ERROR: control-character-in-input-stream ;
-ERROR: control-character-reference ;
-ERROR: end-tag-with-attributes ;
-ERROR: duplicate-attribute ;
-ERROR: end-tag-with-trailing-solidus ;
-ERROR: eof-before-tag-name ;
-ERROR: eof-in-cdata ;
-ERROR: eof-in-comment ;
-ERROR: eof-in-doctype ;
-ERROR: eof-in-script-html-comment-like-text ;
-ERROR: eof-in-tag ;
-ERROR: incorrectly-closed-comment ;
-ERROR: incorrectly-opened-comment ;
-ERROR: invalid-character-sequence-after-doctype-name ;
-ERROR: invalid-first-character-of-tag-name ;
-ERROR: missing-attribute-value ;
-ERROR: missing-doctype-name ;
-ERROR: missing-doctype-public-identifier ;
-ERROR: missing-doctype-system-identifier ;
-ERROR: missing-end-tag-name ;
-ERROR: missing-quote-before-doctype-public-identifier ;
-
-ERROR: missing-quote-before-doctype-system-identifier ;
-ERROR: missing-semicolon-after-character-reference ;
-ERROR: missing-whitespace-after-doctype-public-keyword ;
-ERROR: missing-whitespace-after-doctype-system-keyword ;
-ERROR: missing-whitespace-before-doctype-name ;
-ERROR: missing-whitespace-between-attributes ;
-ERROR: missing-whitespace-between-doctype-public-and-system-identifiers ;
-ERROR: nested-comment ;
-ERROR: noncharacter-character-reference ;
-ERROR: noncharacter-in-input-stream ;
-ERROR: non-void-html-element-start-tag-with-trailing-solidus ;
-ERROR: null-character-reference ;
-ERROR: surrogate-character-reference ;
-ERROR: surrogate-in-input-stream ;
-ERROR: unexpected-character-after-doctype-system-identifier ;
-ERROR: unexpected-character-in-attribute-name ;
-ERROR: unexpected-character-in-unquoted-attribute-value ;
-ERROR: unexpected-equals-sign-before-attribute-name ;
-ERROR: unexpected-null-character ;
-ERROR: unexpected-question-mark-instead-of-tag-name ;
-ERROR: unexpected-solidus-in-tag ;
-ERROR: unknown-named-character-reference ;
-
-! Tree insertion modes
-SINGLETONS: initial-mode before-html-mode before-head-mode
-in-head-mode in-head-noscript-mode after-head-mode
-in-body-mode text-mode in-table-mode in-table-text-mode
-in-caption-mode in-column-group-mode in-table-body-mode
-in-row-mode in-cell-mode in-select-mode in-select-in-table-mode in-template-mode
-after-body-mode in-frameset-mode after-frameset-mode after-after-body-mode
-after-after-frameset-mode ;
-
-TUPLE: document
-quirks-mode?
-limited-quirks-mode?
-iframe-srcdoc?
-scripting? ! set in constructor
-frameset-ok? ! frameset-ok? but we want default to f
-fostering-parent?
-tree
-tree-doctype
-head-element-pointer ! set during insertion time
-parser-cannot-change-mode-flag
-insertion-mode
-original-insertion-mode
-last
-node
-context
-doctype
-tag
-end-tag
-
-tag-name
-end-tag-name
-attribute-name
-attribute-value
-temporary-buffer
-comment-token
-open-elements
-return-state ;
-
-! "reset the insertion mode appropriately"
-! : reset-insertion-mode ( document -- document )
-! f >>last
-! dup open-elements>> ?last >>node
-! dup [ open-elements>> ?first ] [ node>> ] bi = [
-! t >>last dup node>> >>context
-! ] when
-! dup node>> {
-! { [ dup name>> >lower "select" = ] [ drop in-select >>insertion-mode ] }
-! { [
-! dup name>> >lower { "td" "th" } member?
-! pick last>> f = and
-! ] [ drop in-select >>insertion-mode ] }
-! { [ dup name>> >lower "select" = ] [ drop in-select >>insertion-mode ] }
-! { [ dup name>> >lower "select" = ] [ drop in-select >>insertion-mode ] }
-! { [ dup name>> >lower "select" = ] [ drop in-select >>insertion-mode ] }
-! { [ dup name>> >lower "select" = ] [ drop in-select >>insertion-mode ] }
-! { [ dup name>> >lower "select" = ] [ drop in-select >>insertion-mode ] }
-! { [ dup name>> >lower "select" = ] [ drop in-select >>insertion-mode ] }
-! { [ dup name>> >lower "select" = ] [ drop in-select >>insertion-mode ] }
-! { [ dup name>> >lower "select" = ] [ drop in-select >>insertion-mode ] }
-! { [ dup name>> >lower "select" = ] [ drop in-select >>insertion-mode ] }
-! } cond
-! ;
-
-: temporary-buffer-attribute? ( document -- ? )
- return-state>>
- {
- attribute-value-unquoted-state
- attribute-value-single-quoted-state
- attribute-value-double-quoted-state
- } member? ;
-
-! name, public/system identifier should not be empty strings
-! until the state machine demands it
-TUPLE: doctype
- name
- public-identifier
- system-identifier
- quirks? ;
-
-: <doctype> ( -- doctype )
- doctype new ; inline
-
-: new-doctype-from-ch ( ch document -- )
- [
- doctype new
- swap ?1sbuf >>name
- ] dip doctype<< ; inline
-
-: new-doctype-with-quirks ( document -- )
- <doctype> t >>quirks? >>doctype drop ;
-
-TUPLE: tag self-closing? name attributes children end-tag ;
-
-: <tag> ( -- tag )
- tag new
- SBUF" " clone >>name
- V{ } clone >>attributes
- V{ } clone >>children ;
-
-TUPLE: end-tag self-closing? name attributes ;
-
-: <end-tag> ( -- tag )
- end-tag new
- SBUF" " clone >>name
- V{ } clone >>attributes ;
-
-: new-tag ( document -- )
- <tag> >>tag drop ;
-
-: new-end-tag ( document -- )
- <end-tag> >>tag drop ;
-
-: set-self-closing ( document -- )
- tag>> t >>self-closing? drop ;
-
-: <document> ( -- document )
- document new
- V{ } clone >>tree
- initial-mode >>insertion-mode
- <doctype> >>doctype
- t >>frameset-ok?
- ! SBUF" " clone >>tag-name
- SBUF" " clone >>attribute-name
- SBUF" " clone >>attribute-value
- SBUF" " clone >>temporary-buffer
- SBUF" " clone >>comment-token
- V{ } clone >>open-elements
- ; inline
-
-TUPLE: comment open payload close ;
-
-: <comment> ( payload -- comment )
- comment new
- swap >>payload ; inline
-
-: force-quirks ( document -- )
- doctype>> t >>quirks? drop ;
-
-: initialize-doctype-name ( document -- )
- [ SBUF" " clone ] dip doctype>> name<< ;
-
-: initialize-doctype-public-identifier ( document -- )
- [ SBUF" " clone ] dip doctype>> public-identifier<< ;
-
-: initialize-doctype-system-identifier ( document -- )
- [ SBUF" " clone ] dip doctype>> system-identifier<< ;
-
-: push-doctype-name ( ch document -- )
- doctype>> name>> push ;
-
-: push-doctype-public-identifier ( ch document -- )
- doctype>> public-identifier>> push ;
-
-: push-doctype-system-identifier ( ch document -- )
- doctype>> system-identifier>> push ;
-
-! XXX: not html5 spec, fix
-ERROR: unmatched-closing-tag-error stack tag ;
-
-: unclosed-tag? ( obj -- ? )
- { [ tag? ] [ end-tag>> not ] } 1&& ; inline
-
-:: find-matching-tag ( name stack -- seq )
- stack [ { [ unclosed-tag? ] [ name>> name = ] } 1&& ] find-last drop [
- stack swap shorten*
- ] [
- stack name unmatched-closing-tag-error
- ] if* ;
-
-DEFER: tree-insert
-GENERIC: tree-insert* ( document obj insertion-mode -- document )
-
-: limited-quirks-mode? ( doctype -- ? )
- {
- [ public-identifier>> "-//W3C//DTD XHTML 1.0 Frameset//" head? ]
- [ public-identifier>> "-//W3C//DTD XHTML 1.0 Transitional//" head? ]
- [ { [ system-identifier>> ] [ public-identifier>> "-//W3C//DTD HTML 4.01 Frameset//" head? ] } 1&& ]
- [ { [ system-identifier>> ] [ public-identifier>> "-//W3C//DTD HTML 4.01 Transitional//" head? ] } 1&& ]
- } 1|| ;
-
-! https://html.spec.whatwg.org/multipage/parsing.html#the-initial-insertion-mode
-M: initial-mode tree-insert*
- drop {
- { [ dup "\t\n\f\r\s" member? ] [ drop ] }
- { [ dup doctype? ] [
- >>tree-doctype before-html-mode >>insertion-mode
- ] }
- { [ dup comment? ] [ over tree>> push ] }
- { [ dup tag? ] [ over tree>> push ] }
- { [ dup end-tag? ] [
- dup name>> pick tree>> find-matching-tag
- unclip
- swap >>children
- swap >>end-tag
- over tree>> push
- ] }
- [
- over iframe-srcdoc?>> [
- over parser-cannot-change-mode-flag>> [
- [ t >>quirks-mode? ] dip
- ] unless
- ] [
- "must be iframe-srcdoc here" throw
- ] if
- ! reprocess the token
- before-html-mode >>insertion-mode tree-insert
- ]
- } cond ;
-
-! https://html.spec.whatwg.org/multipage/parsing.html#the-before-html-insertion-mode
-M: before-html-mode tree-insert*
- drop {
- { [ dup doctype? ] [ drop ] }
- { [ dup comment? ] [ over tree>> push ] }
- { [ dup "\t\n\f\r\s" member? ] [ drop ] }
- { [ dup { [ tag? ] [ name>> "html" = ] } 1&& ] [
- over tree>> push
- before-head-mode >>insertion-mode
- ] }
- ! these tags are handled in the default case
- { [ dup { [ end-tag? ] [ name>> { "head" "body" "html" "br" } member? not ] } 1&& ] [
- ! error end-tag, ignore
- drop
- ] }
- [
- ! Create missing html tag and reprocess the token
- <tag> "html" >>name pick tree>> push
- before-head-mode >>insertion-mode tree-insert
- ]
- } cond ;
-
-M: before-head-mode tree-insert*
- drop {
- { [ dup "\t\n\f\r\s" member? ] [ drop ] }
- { [ dup comment? ] [ over tree>> push ] }
- { [ dup doctype? ] [ drop ] }
- { [ dup { [ tag? ] [ name>> "html" = ] } 1&& ] [
- ! XXX: in-body-mode rules here for html tag
- ! B
- ! over tree>> push
- ! before-head-mode >>insertion-mode
- "handle html in-body-mode here" throw
- ] }
- { [ dup { [ tag? ] [ name>> "head" = ] } 1&& ] [
- [ swap tree>> push ]
- [ >>head-element-pointer drop ]
- [ drop in-head-mode >>insertion-mode ] 2tri
- ] }
- ! these tags are handled in the default case
- { [ dup { [ end-tag? ] [ name>> { "head" "body" "html" "br" } member? not ] } 1&& ] [
- ! error end-tag, ignore
- drop
- ] }
- ! ignore tag
- { [ dup tag? ] [ drop ] }
- [
- ! Create missing html tag and reprocess the token
- <tag>
- [ "head" >>name pick tree>> push ]
- [ >>head-element-pointer ] bi
- in-head-mode >>insertion-mode tree-insert
- ]
- } cond ;
-
-M: in-head-mode tree-insert*
- drop {
- { [ dup "\t\n\f\r\s" member? ] [ over tree>> push ] }
- { [ dup comment? ] [ over tree>> push ] }
- { [ dup doctype? ] [ drop ] }
- { [ dup { [ tag? ] [ name>> "html" = ] } 1&& ] [
- ! XXX: in-body-mode rules here for html tag
- ! B
- ! over tree>> push
- ! before-head-mode >>insertion-mode
- "handle html in-body-mode here" throw
- unimplemented*
- ] }
- { [ dup { [ tag? ] [ name>> { "base" "basefont" "bgsound" "link" } member? ] } 1&& ] [
- ! non-void-html-element-start-tag-with-trailing-solidus soft error if not self-closing
- unimplemented*
- ] }
- { [ dup { [ tag? ] [ name>> "meta" = ] } 1&& ] [
- unimplemented*
- ] }
- { [ dup { [ tag? ] [ name>> "title" = ] } 1&& ] [
- ! https://html.spec.whatwg.org/multipage/parsing.html#generic-rcdata-element-parsing-algorithm
- "insert title node" throw
- unimplemented*
- ] }
- { [
- dup {
- [ { [ tag? ] [ name>> "noscript" = ] [ scripting?>> ] } 1&& ]
- [ { [ tag? ] [ name>> { "noframes" "style" } member? ] } 1&& ]
- } 1||
- ] [
- ! https://html.spec.whatwg.org/multipage/parsing.html#generic-raw-text-element-parsing-algorithm
- unimplemented*
- ] }
- { [ dup { [ tag? ] [ name>> "noscript" = ] [ scripting?>> not ] } 1&& ] [
- unimplemented*
- over tree>> push
- in-head-noscript-mode >>insertion-mode
- ] }
- { [ dup { [ tag? ] [ name>> "script" = ] } 1&& ] [
- unimplemented*
- text-mode >>insertion-mode
- ] }
- { [ dup { [ end-tag? ] [ name>> "head" = ] } 1&& ] [
- over tree>> last end-tag<<
- after-head-mode >>insertion-mode
- ] }
- { [ dup { [ end-tag? ] [ name>> { "body" "html" "br" } member? ] } 1&& ] [
- ! non-void-html-element-start-tag-with-trailing-solidus soft error if not self-closing
- unimplemented*
- ] }
- { [ dup { [ tag? ] [ name>> "template" = ] } 1&& ] [
- unimplemented*
- in-template-mode >>insertion-mode
- ] }
- { [ dup { [ end-tag? ] [ name>> "template" = ] } 1&& ] [
- unimplemented*
- ] }
- ! XXX: revisit this
- { [ dup {
- [ { [ tag? ] [ name>> "head" = ] } 1&& ]
- [ end-tag? ]
- } 1|| ] [ drop "ignore here" throw ] }
- [
- ! end head tag should be here, pop off, reprocess
- over tree>> pop swap >>end-tag
- after-head-mode >>insertion-mode "omg" throw
- ]
- } cond ;
-
-M: in-head-noscript-mode tree-insert* drop unimplemented* ;
-
-M: after-head-mode tree-insert*
- drop {
- { [ dup "\t\n\f\r\s" member? ] [ over tree>> push ] }
- { [ dup comment? ] [ over tree>> push ] }
- { [ dup doctype? ] [ drop ] }
- { [ dup { [ tag? ] [ name>> "html" = ] } 1&& ] [
- ! XXX: in-body-mode rules here for html tag
- ! B
- ! over tree>> push
- ! before-head-mode >>insertion-mode
- "handle html in-body-mode here" throw
- unimplemented*
- ] }
- { [ dup { [ tag? ] [ name>> "html" = ] } 1&& ] [
- unimplemented*
- ] }
- { [ dup { [ tag? ] [ name>> "body" = ] } 1&& ] [
- over tree>> push
- f >>frameset-ok?
- in-body-mode >>insertion-mode
- ] }
- { [ dup { [ tag? ] [ name>> "frameset" = ] } 1&& ] [
- unimplemented*
- ] }
- { [ dup { [ tag? ] [
- name>> {
- "base" "basefont" "bgsound" "link" "meta"
- "noframes" "script" "style" "template" "title"
- } member? ] } 1&&
- ] [
- unimplemented*
- ] }
- { [ dup { [ end-tag? ] [ name>> "template" = ] } 1&& ] [
- unimplemented*
- ] }
- ! same as default case
- ! { [ dup { [ end-tag? ] [ name>> { "body" "html" "br" } member? not ] } 1&& ] [
- ! unimplemented*
- ! ] }
- { [
- dup {
- [ { [ tag? ] [ name>> "head" = ] } 1&& ]
- [ { [ end-tag? ] [ name>> { "body" "html" "br" } member? not ] } 1&& ]
- } 1||
- ] [
- "omg revisit this" throw
- unimplemented*
- ] }
- [
- B
- <tag> "body" >>name pick tree>> push
- in-body-mode >>insertion-mode tree-insert
- ]
- } cond ;
-
-M: in-body-mode tree-insert*
- drop {
- { [ dup CHAR: \0 = ] [ drop ] }
- { [ dup "\t\n\f\r\s" member? ] [ over tree>> push ] }
- { [ dup comment? ] [ over tree>> push ] }
- { [ dup doctype? ] [ drop ] }
- { [ dup { [ tag? ] [ name>> "html" = ] } 1&& ] [ drop ] }
- { [ dup {
- [
- {
- [ tag? ]
- [
- name>> {
- "base" "basefont" "bgsound" "link" "meta"
- "noframes" "script" "style" "template" "title"
- } member?
- ]
- } 1&&
- ] [
- { [ end-tag? ] [ name>> "template" = ] } 1&&
- ] } 1||
- ] [
- unimplemented*
- ] }
- ! XXX: parse error
- { [ dup { [ tag? ] [ name>> "body" = ] } 1&& ] [ drop unimplemented* ] }
- { [ dup { [ tag? ] [ name>> "frameset" = ] } 1&& ] [ drop unimplemented* ] }
- ! XXX: eof
- ! { [ ] [ ] }
- { [ dup { [ end-tag? ] [ name>> "body" = ] } 1&& ] [
- "body" pick tree>> find-matching-tag
- unclip
- swap >>children
- swap >>end-tag
- over tree>> push
-
- after-body-mode >>insertion-mode
- ] }
- { [ dup { [ end-tag? ] [ name>> "html" = ] } 1&& ] [ drop unimplemented* ] }
- ! { [ ] [ ] }
- [
- unimplemented*
- ]
- } cond ;
-
-M: text-mode tree-insert* drop unimplemented* ;
-M: in-table-mode tree-insert* drop unimplemented* ;
-M: in-table-text-mode tree-insert* drop unimplemented* ;
-M: in-caption-mode tree-insert* drop unimplemented* ;
-M: in-column-group-mode tree-insert* drop unimplemented* ;
-M: in-table-body-mode tree-insert* drop unimplemented* ;
-M: in-row-mode tree-insert* drop unimplemented* ;
-M: in-cell-mode tree-insert* drop unimplemented* ;
-M: in-select-mode tree-insert* drop unimplemented* ;
-M: in-select-in-table-mode tree-insert* drop unimplemented* ;
-M: in-template-mode tree-insert* drop unimplemented* ;
-M: after-body-mode tree-insert*
- drop {
- { [ dup "\t\n\f\r\s" member? ] [ over tree>> push ] }
- { [ dup comment? ] [ over tree>> push ] }
- { [ dup doctype? ] [ drop ] }
- { [ dup { [ tag? ] [ name>> "html" = ] } 1&& ] [
- unimplemented*
- ] }
- { [ dup { [ end-tag? ] [ name>> "html" = ] } 1&& ] [
- ! XXX: make this a function
- "html" pick tree>> find-matching-tag
- unclip
- swap >>children
- swap >>end-tag
- over tree>> push
-
- after-after-body-mode >>insertion-mode
- ] }
- [
- unimplemented*
- ]
- } cond ;
-M: in-frameset-mode tree-insert* drop unimplemented* ;
-M: after-frameset-mode tree-insert* drop unimplemented* ;
-
-M: after-after-body-mode tree-insert*
- drop {
- { [ dup comment? ] [ over tree>> push ] }
- { [ dup doctype? ] [ unimplemented* ] }
- { [ dup "\t\n\f\r\s" member? ] [ unimplemented* ] }
- { [ dup { [ tag? ] [ name>> "html" = ] } 1&& ] [ unimplemented* ] }
- ! eof
- { [ dup f = ] [ drop ] }
- [
- ! XXX: parse error
- [ in-body-mode >>insertion-mode ] dip tree-insert
- ]
- } cond ;
-
-M: after-after-frameset-mode tree-insert* drop unimplemented* ;
-
-: tree-insert ( document obj -- document )
- over insertion-mode>> tree-insert* ;
-
-MEMO: load-entities ( -- assoc )
- "vocab:html5/entities.json" utf8 file-contents json> ;
-
-MEMO: entities-suffix-array ( -- assoc )
- load-entities keys >suffix-array ;
-
-: lookup-entity ( string -- entity/string ? )
- load-entities ?at ;
-
-: named-character-match? ( document -- prefix? exact? )
- temporary-buffer>>
- [ entities-suffix-array query f like ]
- [ last CHAR: ; = ] bi ;
-
-ERROR: unknown-named-entity entity ;
-: take-named-character ( document -- )
- dup
- temporary-buffer>> >string lookup-entity [
- "characters" of
- SBUF" " clone-like >>temporary-buffer drop
- ] [
- unknown-named-entity
- ] if ;
-
-! XXX: remove the tag>> name>> push part
-: push-tag-name ( ch document -- )
- [ tag>> name>> push ]
- [
- 2drop ! tag-name>> push
- ] 2bi ;
-: push-attribute-name ( ch document -- ) attribute-name>> push ;
-: push-attribute-value ( ch document -- ) attribute-value>> push ;
-: push-comment-token ( ch document -- ) comment-token>> push ;
-: push-all-comment-token ( string document -- ) comment-token>> push-all ;
-
-ERROR: invalid-return-state obj ;
-: check-return-state ( obj -- return-state )
- dup word? [ invalid-return-state ] unless ;
-
-: current-attribute ( document -- attribute/f )
- [ attribute-name>> >string f like ]
- [ attribute-value>> >string f like ] bi
- 2dup or [ 2array ] [ 2drop f ] if ;
-
-: push-when ( obj/f seq -- )
- over [ push ] [ 2drop ] if ; inline
-
-: reset-attribute ( document -- )
- SBUF" " clone >>attribute-name
- SBUF" " clone >>attribute-value drop ;
-
-: push-attribute ( document -- )
- [ current-attribute ]
- [ tag>> attributes>> push-when ]
- [ reset-attribute ] tri ;
-
-: emit-eof ( document -- )
- "emit-eof" print
- f tree-insert drop ;
-: emit-char ( char document -- ) drop "emit-char: " write 1string . ;
-: emit-string ( char document -- ) drop "emit-string: " write . ;
-: emit-tag ( document -- )
- "emit-tag: " write
- {
- [ tag>> [ name>> >string ] [ name<< ] bi ]
- [ push-attribute ]
- [ tag>> . ]
- [ dup tag>> tree-insert drop ]
- [ f >>tag drop ]
- } cleave ;
-: emit-end-tag ( document -- )
- "emit-end-tag: " write
- [ tag>> . ]
- [ f >>tag drop ] bi ;
-: emit-comment-token ( document -- )
- "emit-comment-token: " write
- {
- [ comment-token>> >string . ]
- [ dup comment-token>> >string <comment> tree-insert drop ]
- [ SBUF" " clone >>comment-token drop ]
- } cleave ;
-: emit-doctype ( document -- )
- "emit-doctype: " write dup doctype>> .
- {
- [ doctype>> [ >string ] change-name drop ]
- [
- ! XXX: handle iframe srcdoc document
- dup { [ doctype>> name>> "html" = not ] [ parser-cannot-change-mode-flag>> not ] } 1&& [
- t >>quirks-mode?
- ] [
- dup { [ iframe-srcdoc?>> not ] [ parser-cannot-change-mode-flag>> not ] } 1&& [
- dup doctype>> limited-quirks-mode? [ t >>limited-quirks-mode? ] when
- ] when
- ] if
- drop
- ]
- [ dup doctype>> tree-insert drop ]
- [ f >>doctype drop ]
- } cleave ;
-
-: reset-temporary-buffer ( document -- ) SBUF" " clone temporary-buffer<< ;
-: ch>new-temporary-buffer ( ch document -- ) [ 1sbuf ] dip temporary-buffer<< ;
-: string>new-temporary-buffer ( string document -- ) [ SBUF" " clone-like ] dip temporary-buffer<< ;
-: temporary-buffer-last ( document -- ch/f ) temporary-buffer>> ?last ;
-: push-temporary-buffer ( ch document -- ) temporary-buffer>> push ;
-: push-all-temporary-buffer ( string document -- ) temporary-buffer>> push-all ;
-
-: flush-temporary-buffer ( document -- )
- "flush-temporary-buffer: " write
- [ [ temporary-buffer>> ] keep [ emit-char ] curry each ]
- [ SBUF" " clone >>temporary-buffer drop ] bi ;
-
-: emit-temporary-buffer-with ( string document -- )
- [ temporary-buffer>> push-all ]
- [ flush-temporary-buffer ] bi ;
-
-! check if matches open tag
-: appropriate-end-tag-token? ( document -- ? )
- drop f ;
-
-: ascii-upper-alpha? ( ch -- ? ) [ CHAR: A CHAR: Z between? ] [ f ] if* ; inline
-: ascii-lower-alpha? ( ch -- ? ) [ CHAR: a CHAR: z between? ] [ f ] if* ; inline
-: ascii-upper-hex-digit? ( ch -- ? ) [ CHAR: A CHAR: F between? ] [ f ] if* ; inline
-: ascii-lower-hex-digit? ( ch -- ? ) [ CHAR: a CHAR: f between? ] [ f ] if* ; inline
-: ascii-hex-alpha? ( ch -- ? ) { [ ascii-upper-hex-digit? ] [ ascii-lower-hex-digit? ] } 1|| ; inline
-
-: ascii-digit? ( ch/f -- ? ) [ CHAR: 0 CHAR: 9 between? ] [ f ] if* ;
-: ascii-alpha? ( ch/f -- ? ) { [ ascii-lower-alpha? ] [ ascii-upper-alpha? ] } 1|| ;
-: ascii-alphanumeric? ( ch/f -- ? ) { [ ascii-alpha? ] [ ascii-digit? ] } 1|| ;
-: ascii-hex-digit? ( ch/f -- ? ) { [ ascii-digit? ] [ ascii-hex-alpha? ] } 1|| ;
-
-: (return-state) ( document n/f string ch/f -- document n'/f string )
- reach [ f ] change-return-state drop check-return-state
- execute( document n/f string ch/f -- document n'/f string ) ;
-
-: return-state ( document n/f string -- document n'/f string )
- pick [ f ] change-return-state drop check-return-state
- execute( document n/f string -- document n'/f string ) ;
-
-: (data-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: & = ] [ drop [ \ data-state >>return-state ] 2dip character-reference-state ] }
- { [ dup CHAR: < = ] [ drop tag-open-state ] }
- { [ dup CHAR: \0 = ] [ unexpected-null-character ] }
- { [ dup f = ] [ drop pick emit-eof ] }
- [ reach emit-char data-state ]
- } cond ;
-
-: data-state ( document n/f string -- document n'/f string )
- next-char-from (data-state) ;
-
-
-: (rcdata-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: & = ] [ drop [ \ rcdata-state >>return-state ] 2dip character-reference-state ] }
- { [ dup CHAR: < = ] [ drop rcdata-less-than-sign-state ] }
- { [ dup CHAR: \0 = ] [ unexpected-null-character ] }
- { [ dup f = ] [ drop pick emit-eof ] }
- [ reach emit-char rcdata-state ]
- } cond ;
-
-: rcdata-state ( document n/f string -- document n'/f string )
- next-char-from (rcdata-state) ;
-
-
-: (rawtext-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: < = ] [ drop rawtext-less-than-sign-state ] }
- { [ dup CHAR: \0 = ] [ drop unexpected-null-character ] }
- { [ dup f = ] [ drop pick emit-eof ] }
- [ reach emit-char rawtext-state ]
- } cond ;
-
-: rawtext-state ( document n/f string -- document n'/f string )
- next-char-from (rawtext-state) ;
-
-
-: (script-data-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: < = ] [ drop script-data-less-than-sign-state ] }
- { [ dup CHAR: \0 = ] [ drop unexpected-null-character ] }
- { [ dup f = ] [ drop pick emit-eof ] }
- [ reach emit-char script-data-state ]
- } cond ;
-
-: script-data-state ( document n/f string -- document n'/f string )
- next-char-from (script-data-state) ;
-
-
-: (plaintext-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: \0 = ] [ drop unexpected-null-character ] }
- { [ dup f = ] [ drop pick emit-eof ] }
- [ reach emit-char plaintext-state ]
- } cond ;
-
-: plaintext-state ( document n/f string -- document n'/f string )
- next-char-from (plaintext-state) ;
-
-
-: (tag-open-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup ascii-alpha? ] [ reach new-tag (tag-name-state) ] }
- { [ dup CHAR: ! = ] [ drop markup-declaration-open-state ] }
- { [ dup CHAR: / = ] [ drop end-tag-open-state ] }
- { [ dup CHAR: ? = ] [ unexpected-question-mark-instead-of-tag-name ] }
- { [ dup f = ] [ eof-before-tag-name ] }
- [ invalid-first-character-of-tag-name ]
- } cond ;
-
-: tag-open-state ( document n/f string -- document n'/f string )
- next-char-from (tag-open-state) ;
-
-
-: (end-tag-open-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup ascii-alpha? ] [ reach new-end-tag (tag-name-state) ] }
- { [ dup CHAR: > = ] [ missing-end-tag-name ] }
- { [ dup f = ] [ eof-before-tag-name ] }
- [ invalid-first-character-of-tag-name ]
- } cond ;
-
-: end-tag-open-state ( document n/f string -- document n'/f string )
- next-char-from (end-tag-open-state) ;
-
-
-: (tag-name-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup ascii-upper-alpha? ] [ 0x20 + reach push-tag-name tag-name-state ] }
- { [ dup "\t\n\f\s" member? ] [ drop before-attribute-name-state ] }
- { [ dup CHAR: / = ] [ drop self-closing-start-tag-state ] }
- { [ dup CHAR: > = ] [ drop pick emit-tag data-state ] }
- { [ dup CHAR: \0 = ] [ unexpected-null-character ] }
- { [ dup f = ] [ eof-before-tag-name ] }
- [ reach push-tag-name tag-name-state ]
- } cond ;
-
-: tag-name-state ( document n/f string -- document n'/f string )
- next-char-from (tag-name-state) ;
-
-
-: (rcdata-less-than-sign-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: / = ] [ drop pick reset-temporary-buffer rcdata-end-tag-open-state ] }
- [ [ CHAR: < reach emit-char ] dip (rcdata-state) ]
- } cond ;
-
-: rcdata-less-than-sign-state ( document n/f string -- document n'/f string )
- next-char-from (rcdata-less-than-sign-state) ;
-
-
-: (rcdata-end-tag-open-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup ascii-alpha? ] [ reach new-end-tag (rcdata-end-tag-name-state) ] }
- [ [ CHAR: < reach emit-char ] dip (rcdata-state) ]
- } cond ;
-
-: rcdata-end-tag-open-state ( document n/f string -- document n'/f string )
- next-char-from (rcdata-end-tag-open-state) ;
-
-
-: (rcdata-end-tag-name-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s" member? ] [
- drop pick appropriate-end-tag-token?
- [ before-attribute-name-state ] [ "</" reach emit-temporary-buffer-with rcdata-state ] if
- ] }
- { [ dup CHAR: / = ] [
- drop pick appropriate-end-tag-token?
- [ self-closing-start-tag-state ] [ "</" reach emit-temporary-buffer-with rcdata-state ] if
- ] }
- { [ dup CHAR: > = ] [
- drop pick appropriate-end-tag-token?
- [ pick emit-end-tag data-state ] [ "</" reach emit-temporary-buffer-with rcdata-state ] if
- ] }
- { [ dup ascii-upper-alpha? ] [ [ 0x20 + reach push-tag-name ] [ reach push-temporary-buffer ] bi rcdata-end-tag-name-state ] }
- { [ dup ascii-lower-alpha? ] [ [ reach push-tag-name ] [ reach push-temporary-buffer ] bi rcdata-end-tag-name-state ] }
- [ [ "</" reach emit-temporary-buffer-with ] dip (rcdata-state) ]
- } cond ;
-
-: rcdata-end-tag-name-state ( document n/f string -- document n'/f string )
- next-char-from (rcdata-end-tag-name-state) ;
-
-
-: (rawtext-less-than-sign-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: / = ] [ drop pick reset-temporary-buffer rawtext-end-tag-open-state ] }
- [ [ CHAR: < reach emit-char ] dip (rawtext-state) ]
- } cond ;
-
-: rawtext-less-than-sign-state ( document n/f string -- document n'/f string )
- next-char-from (rawtext-less-than-sign-state) ;
-
-
-: (rawtext-end-tag-open-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup ascii-alpha? ] [ reach new-end-tag (rawtext-end-tag-name-state) ] }
- [ [ CHAR: < reach emit-char ] dip (rawtext-state) ]
- } cond ;
-
-: rawtext-end-tag-open-state ( document n/f string -- document n'/f string )
- next-char-from (rawtext-end-tag-open-state) ;
-
-
-: (rawtext-end-tag-name-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s" member? ] [
- drop pick appropriate-end-tag-token?
- [ before-attribute-name-state ] [ "</" reach emit-temporary-buffer-with rawtext-state ] if
- ] }
- { [ dup CHAR: / = ] [
- drop pick appropriate-end-tag-token?
- [ self-closing-start-tag-state ] [ "</" reach emit-temporary-buffer-with rawtext-state ] if
- ] }
- { [ dup CHAR: > = ] [
- drop pick appropriate-end-tag-token?
- [ pick emit-end-tag data-state ] [ "</" reach emit-temporary-buffer-with rawtext-state ] if
- ] }
- { [ dup ascii-upper-alpha? ] [ [ 0x20 + reach push-tag-name ] [ reach push-temporary-buffer ] bi rawtext-end-tag-name-state ] }
- { [ dup ascii-lower-alpha? ] [ [ reach push-tag-name ] [ reach push-temporary-buffer ] bi rawtext-end-tag-name-state ] }
- [ [ "</" reach emit-temporary-buffer-with ] dip (rawtext-state) ]
- } cond ;
-
-: rawtext-end-tag-name-state ( document n/f string -- document n'/f string )
- next-char-from (rawtext-end-tag-name-state) ;
-
-
-: (script-data-less-than-sign-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: / = ] [ drop pick reset-temporary-buffer script-data-end-tag-open-state ] }
- { [ dup CHAR: ! = ] [ drop "<!" reach emit-string script-data-escape-start-state ] }
- [ [ CHAR: < reach emit-char ] dip (script-data-state) ]
- } cond ;
-
-: script-data-less-than-sign-state ( document n/f string -- document n'/f string )
- next-char-from (script-data-less-than-sign-state) ;
-
-
-: (script-data-end-tag-open-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup ascii-alpha? ] [ reach new-end-tag (script-data-end-tag-name-state) ] }
- [ [ "</" reach emit-string ] dip (script-data-state) ]
- } cond ;
-
-: script-data-end-tag-open-state ( document n/f string -- document n'/f string )
- next-char-from (script-data-end-tag-open-state) ;
-
-
-: (script-data-end-tag-name-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s" member? ] [
- drop pick appropriate-end-tag-token?
- [ before-attribute-name-state ] [ "</" reach emit-temporary-buffer-with script-data-state ] if
- ] }
- { [ dup CHAR: / = ] [
- drop pick appropriate-end-tag-token?
- [ self-closing-start-tag-state ] [ "</" reach emit-temporary-buffer-with script-data-state ] if
- ] }
- { [ dup CHAR: > = ] [
- drop pick appropriate-end-tag-token?
- [ pick emit-end-tag data-state ] [ "</" reach emit-temporary-buffer-with script-data-state ] if
- ] }
- { [ dup ascii-upper-alpha? ] [ [ 0x20 + reach push-tag-name ] [ reach push-temporary-buffer ] bi rawtext-end-tag-name-state ] }
- { [ dup ascii-lower-alpha? ] [ [ reach push-tag-name ] [ reach push-temporary-buffer ] bi rawtext-end-tag-name-state ] }
- [ [ "</" reach emit-temporary-buffer-with ] dip (script-data-state) ]
- } cond ;
-
-: script-data-end-tag-name-state ( document n/f string -- document n'/f string )
- next-char-from (script-data-end-tag-name-state) ;
-
-
-: (script-data-escape-start-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: - = ] [ drop script-data-escape-start-dash-state ] }
- [ (script-data-state) ]
- } cond ;
-
-: script-data-escape-start-state ( document n/f string -- document n'/f string )
- next-char-from (script-data-escape-start-state) ;
-
-
-: (script-data-escape-start-dash-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: - = ] [ drop script-data-escaped-dash-dash-state ] }
- [ (script-data-state) ]
- } cond ;
-
-: script-data-escape-start-dash-state ( document n/f string -- document n'/f string )
- next-char-from (script-data-escape-start-dash-state) ;
-
-
-: (script-data-escaped-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: - = ] [ drop script-data-escaped-dash-state ] }
- { [ dup CHAR: < = ] [ drop script-data-escaped-less-than-sign-state ] }
- { [ dup CHAR: \0 = ] [ unexpected-null-character CHAR: replacement-character unimplemented* ] }
- { [ dup f = ] [ eof-in-script-html-comment-like-text ] }
- [ reach emit-char script-data-escaped-state ]
- } cond ;
-
-: script-data-escaped-state ( document n/f string -- document n'/f string )
- next-char-from (script-data-escaped-state) ;
-
-
-: (script-data-escaped-dash-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: - = ] [ drop script-data-escaped-dash-dash-state ] }
- { [ dup CHAR: < = ] [ drop script-data-escaped-less-than-sign-state ] }
- { [ dup CHAR: \0 = ] [ unexpected-null-character script-data-escaped-state ] }
- { [ dup f = ] [ eof-in-script-html-comment-like-text ] }
- [ reach emit-char script-data-escaped-state ]
- } cond ;
-
-: script-data-escaped-dash-state ( document n/f string -- document n'/f string )
- next-char-from (script-data-escaped-dash-state) ;
-
-
-: (script-data-escaped-dash-dash-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: - = ] [ reach emit-char script-data-escaped-dash-dash-state ] }
- { [ dup CHAR: < = ] [ drop script-data-escaped-less-than-sign-state ] }
- { [ dup CHAR: > = ] [ reach emit-char script-data-state ] }
- { [ dup CHAR: \0 = ] [ unexpected-null-character script-data-escaped-state ] }
- { [ dup f = ] [ eof-in-script-html-comment-like-text ] }
- [ reach emit-char script-data-escaped-state ]
- } cond ;
-
-: script-data-escaped-dash-dash-state ( document n/f string -- document n'/f string )
- next-char-from (script-data-escaped-dash-dash-state) ;
-
-
-: (script-data-escaped-less-than-sign-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: / = ] [ drop pick reset-temporary-buffer script-data-escaped-end-tag-open-state ] }
- { [ dup ascii-alpha? ] [ [ pick reset-temporary-buffer CHAR: < reach emit-char ] dip (script-data-double-escape-start-state) ] }
- [ [ CHAR: < reach emit-char ] dip (script-data-escaped-state) ]
- } cond ;
-
-: script-data-escaped-less-than-sign-state ( document n/f string -- document n'/f string )
- next-char-from (script-data-escaped-less-than-sign-state) ;
-
-
-: (script-data-escaped-end-tag-open-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup ascii-alpha? ] [ [ pick new-end-tag ] dip (script-data-escaped-end-tag-name-state) ] }
- [ [ "</" reach emit-string ] dip (script-data-escaped-state) ]
- } cond ;
-
-: script-data-escaped-end-tag-open-state ( document n/f string -- document n'/f string )
- next-char-from (script-data-escaped-end-tag-open-state) ;
-
-
-: (script-data-escaped-end-tag-name-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s" member? ] [
- drop pick appropriate-end-tag-token?
- [ before-attribute-name-state ] [ "</" reach emit-temporary-buffer-with script-data-escaped-state ] if
- ] }
- { [ dup CHAR: / = ] [
- drop pick appropriate-end-tag-token?
- [ self-closing-start-tag-state ] [ "</" reach emit-temporary-buffer-with script-data-escaped-state ] if
- ] }
- { [ dup CHAR: > = ] [
- drop pick appropriate-end-tag-token?
- [ pick emit-end-tag data-state ] [ "</" reach emit-temporary-buffer-with script-data-escaped-state ] if
- ] }
- { [ dup ascii-upper-alpha? ] [ [ 0x20 + reach push-tag-name ] [ reach push-temporary-buffer ] bi script-data-escaped-end-tag-name-state ] }
- { [ dup ascii-lower-alpha? ] [ [ reach push-tag-name ] [ reach push-temporary-buffer ] bi script-data-escaped-end-tag-name-state ] }
- [ [ "</" reach emit-temporary-buffer-with ] dip (script-data-escaped-state) ]
- } cond ;
-
-: script-data-escaped-end-tag-name-state ( document n/f string -- document n'/f string )
- next-char-from (script-data-escaped-end-tag-name-state) ;
-
-
-: (script-data-double-escape-start-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s/>" member? ] [
- reach emit-char
- pick temporary-buffer>> "script" sequence=
- [ script-data-double-escaped-state ] [ script-data-escaped-state ] if
- ] }
- { [ dup ascii-upper-alpha? ] [ [ 0x20 + reach push-tag-name ] [ reach push-temporary-buffer ] bi script-data-double-escape-start-state ] }
- { [ dup ascii-lower-alpha? ] [ [ reach push-tag-name ] [ reach push-temporary-buffer ] bi script-data-double-escape-start-state ] } ! todo
- [ (script-data-escaped-state) ]
- } cond ;
-
-: script-data-double-escape-start-state ( document n/f string -- document n'/f string )
- next-char-from (script-data-double-escape-start-state) ;
-
-
-: (script-data-double-escaped-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: - = ] [ reach emit-char script-data-double-escaped-dash-state ] }
- { [ dup CHAR: < = ] [ reach emit-char script-data-double-escaped-less-than-sign-state ] }
- { [ dup CHAR: \0 = ] [
- unexpected-null-character
- CHAR: replacement-character reach emit-char
- script-data-double-escaped-state
- ] }
- { [ dup f = ] [ eof-in-script-html-comment-like-text ] }
- [ reach emit-char script-data-double-escaped-state ]
- } cond ;
-
-: script-data-double-escaped-state ( document n/f string -- document n'/f string )
- next-char-from (script-data-double-escaped-state) ;
-
-
-: (script-data-double-escaped-dash-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: - = ] [ reach emit-char script-data-double-escaped-dash-dash-state ] }
- { [ dup CHAR: < = ] [ reach emit-char script-data-double-escaped-less-than-sign-state ] }
- { [ dup CHAR: \0 = ] [
- unexpected-null-character
- CHAR: replacement-character reach emit-char
- script-data-double-escaped-state
- ] }
- { [ dup f = ] [ eof-in-script-html-comment-like-text ] }
- [ reach emit-char script-data-double-escaped-state ]
- } cond ;
-
-: script-data-double-escaped-dash-state ( document n/f string -- document n'/f string )
- next-char-from (script-data-double-escaped-dash-state) ;
-
-
-: (script-data-double-escaped-dash-dash-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: - = ] [ reach emit-char script-data-double-escaped-dash-dash-state ] }
- { [ dup CHAR: < = ] [ reach emit-char script-data-double-escaped-less-than-sign-state ] }
- { [ dup CHAR: > = ] [ reach emit-char script-data-state ] }
- { [ dup CHAR: \0 = ] [
- unexpected-null-character
- CHAR: replacement-character reach emit-char
- script-data-double-escaped-state
- ] }
- { [ dup f = ] [ eof-in-script-html-comment-like-text ] }
- [ reach emit-char script-data-escaped-state ]
- } cond ;
-
-: script-data-double-escaped-dash-dash-state ( document n/f string -- document n'/f string )
- next-char-from (script-data-double-escaped-dash-dash-state) ;
-
-
-: (script-data-double-escaped-less-than-sign-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: / = ] [ reach emit-char pick reset-temporary-buffer script-data-double-escape-end-state ] }
- [ (script-data-double-escaped-state) ]
- } cond ;
-
-: script-data-double-escaped-less-than-sign-state ( document n/f string -- document n'/f string )
- next-char-from (script-data-double-escaped-less-than-sign-state) ;
-
-
-: (script-data-double-escape-end-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s/>" member? ] [
- reach emit-char
- pick temporary-buffer>> "script" sequence=
- [ script-data-escaped-state ] [ script-data-double-escaped-state ] if
- ] }
- { [ dup ascii-upper-alpha? ] [ [ 0x20 + reach push-tag-name ] [ reach push-temporary-buffer ] bi script-data-double-escape-end-state ] }
- { [ dup ascii-lower-alpha? ] [ [ reach push-tag-name ] [ reach push-temporary-buffer ] bi script-data-double-escape-end-state ] } ! todo
- [ (script-data-double-escaped-state) ]
- } cond ;
-
-: script-data-double-escape-end-state ( document n/f string -- document n'/f string )
- next-char-from (script-data-double-escape-end-state) ;
-
-
-: (before-attribute-name-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s" member? ] [ drop before-attribute-name-state ] }
- { [ dup "/>" member? ] [ (after-attribute-name-state) ] }
- { [ dup f = ] [ (after-attribute-name-state) ] }
- { [ dup CHAR: = = ] [ unexpected-equals-sign-before-attribute-name ] }
- [ reach push-attribute (attribute-name-state) ]
- } cond ;
-
-: before-attribute-name-state ( document n/f string -- document n'/f string )
- next-char-from (before-attribute-name-state) ;
-
-
-: (attribute-name-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s/>" member? ] [ (after-attribute-name-state) ] }
- { [ dup f = ] [ (after-attribute-name-state) ] }
- { [ dup CHAR: = = ] [ drop before-attribute-value-state ] }
- { [ dup ascii-upper-alpha? ] [
- 0x20 + reach push-attribute-name
- attribute-name-state
- ] }
- { [ dup CHAR: \0 = ] [ unexpected-null-character ] }
- { [ dup "\"'<" member? ] [
- unexpected-character-in-attribute-name
- reach push-attribute-name attribute-name-state
- ] }
- [ reach push-attribute-name attribute-name-state ]
- } cond ;
-
-: attribute-name-state ( document n/f string -- document n'/f string )
- next-char-from (attribute-name-state) ;
-
-
-: (after-attribute-name-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s" member? ] [ drop after-attribute-name-state ] }
- { [ dup CHAR: / = ] [ drop self-closing-start-tag-state ] }
- { [ dup CHAR: = = ] [ drop before-attribute-value-state ] }
- { [ dup CHAR: > = ] [ drop pick emit-tag data-state ] }
- { [ dup f = ] [ eof-in-tag ] }
- [ [ pick push-attribute ] dip (attribute-name-state) ]
- } cond ;
-
-: after-attribute-name-state ( document n/f string -- document n'/f string )
- next-char-from (after-attribute-name-state) ;
-
-
-: (before-attribute-value-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s" member? ] [ drop before-attribute-name-state ] }
- { [ dup CHAR: " = ] [ drop attribute-value-double-quoted-state ] }
- { [ dup CHAR: ' = ] [ drop attribute-value-single-quoted-state ] }
- { [ dup CHAR: > = ] [ drop missing-attribute-value ] }
- [ (attribute-value-unquoted-state) ]
- } cond ;
-
-: before-attribute-value-state ( document n/f string -- document n'/f string )
- next-char-from (before-attribute-value-state) ;
-
-
-: (attribute-value-double-quoted-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: " = ] [ drop after-attribute-value-quoted-state ] }
- { [ dup CHAR: & = ] [
- drop
- [ \ attribute-value-double-quoted-state >>return-state ] 2dip character-reference-state
- ] }
- { [ dup CHAR: \0 = ] [ unexpected-null-character ] }
- { [ dup f = ] [ eof-in-tag ] }
- [ reach push-attribute-value attribute-value-double-quoted-state ]
- } cond ;
-
-: attribute-value-double-quoted-state ( document n/f string -- document n'/f string )
- next-char-from (attribute-value-double-quoted-state) ;
-
-
-: (attribute-value-single-quoted-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: ' = ] [ drop after-attribute-value-quoted-state ] }
- { [ dup CHAR: & = ] [
- drop [ \ attribute-value-single-quoted-state >>return-state ] 2dip
- character-reference-state
- ] }
- { [ dup CHAR: \0 = ] [
- drop unexpected-null-character
- CHAR: replacement-character reach push-attribute-value
- ] }
- { [ dup f = ] [ eof-in-tag ] }
- [ reach push-attribute-value attribute-value-single-quoted-state ]
- } cond ;
-
-: attribute-value-single-quoted-state ( document n/f string -- document n'/f string )
- next-char-from (attribute-value-single-quoted-state) ;
-
-
-: (attribute-value-unquoted-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s" member? ] [ drop before-attribute-name-state ] }
- { [ dup CHAR: & = ] [
- drop
- [ \ attribute-value-unquoted-state >>return-state ] 2dip character-reference-state
- ] }
- { [ dup CHAR: > = ] [ drop pick emit-tag data-state ] }
- { [ dup CHAR: \0 = ] [ drop unexpected-null-character CHAR: replacement-character reach push-attribute-value ] }
- { [ dup "\"'<=`" member? ] [
- unexpected-character-in-unquoted-attribute-value
- reach push-attribute-value
- attribute-value-unquoted-state
- ] }
- { [ dup f = ] [ eof-in-tag ] }
- [ reach push-attribute-value attribute-value-unquoted-state ]
- } cond ;
-
-: attribute-value-unquoted-state ( document n/f string -- document n'/f string )
- next-char-from (attribute-value-unquoted-state) ;
-
-
-: (after-attribute-value-quoted-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s" member? ] [ drop before-attribute-name-state ] }
- { [ dup CHAR: / = ] [ drop self-closing-start-tag-state ] }
- { [ dup CHAR: > = ] [ drop pick emit-tag data-state ] }
- { [ dup f = ] [ eof-in-tag ] }
- [ missing-whitespace-between-attributes (before-attribute-name-state) ]
- } cond ;
-
-: after-attribute-value-quoted-state ( document n/f string -- document n'/f string )
- next-char-from (after-attribute-value-quoted-state) ;
-
-
-: (self-closing-start-tag-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: > = ] [ drop pick [ set-self-closing ] [ emit-tag ] bi data-state ] }
- { [ dup f = ] [ eof-in-tag ] }
- [ unexpected-solidus-in-tag ]
- } cond ;
-
-: self-closing-start-tag-state ( document n/f string -- document n'/f string )
- next-char-from (self-closing-start-tag-state) ;
-
-
-: (bogus-comment-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: > = ] [ drop pick emit-comment-token data-state ] }
- { [ dup f = ] [ drop pick [ emit-comment-token ] [ emit-eof ] bi ] }
- { [ dup CHAR: \0 = ] [ drop unexpected-null-character CHAR: replacement-character reach push-comment-token ] }
- [ reach push-comment-token bogus-comment-state ]
- } cond ;
-
-: bogus-comment-state ( document n/f string -- document n'/f string )
- next-char-from (bogus-comment-state) ;
-
-
-: markup-declaration-open-state ( document n/f string -- document n'/f string )
- {
- { [ "--" take-from? ] [ comment-start-state ] }
- { [ "DOCTYPE" take-from-insensitive? ] [ doctype-state ] }
- { [ "[CDATA[" take-from-insensitive? ] [ unimplemented* ] }
- [
- incorrectly-opened-comment ! bogus-comment-state
- ]
- } cond ;
-
-: (comment-start-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: - = ] [ drop comment-start-dash-state ] }
- { [ dup CHAR: > = ] [ drop abrupt-closing-of-empty-comment pick emit-comment-token data-state ] }
- [ (comment-state) ]
- } cond ;
-
-: comment-start-state ( document n/f string -- document n'/f string )
- next-char-from (comment-start-state) ;
-
-
-: (comment-start-dash-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: - = ] [ drop comment-end-state ] }
- { [ dup CHAR: > = ] [ drop abrupt-closing-of-empty-comment ] }
- { [ dup f = ] [ eof-in-comment ] }
- [ [ CHAR: - reach push-comment-token ] dip (comment-state) ]
- } cond ;
-
-: comment-start-dash-state ( document n/f string -- document n'/f string )
- next-char-from (comment-start-dash-state) ;
-
-
-: (comment-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: < = ] [ reach push-comment-token comment-less-than-sign-state ] }
- { [ dup CHAR: - = ] [ drop comment-end-dash-state ] }
- { [ dup CHAR: \0 = ] [ drop unexpected-null-character ] }
- { [ dup f = ] [ eof-in-comment ] }
- [ reach push-comment-token comment-state ]
- } cond ;
-
-: comment-state ( document n/f string -- document n'/f string )
- next-char-from (comment-state) ;
-
-
-: (comment-less-than-sign-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: ! = ] [ reach push-comment-token comment-less-than-sign-bang-state ] }
- { [ dup CHAR: < = ] [ reach push-comment-token comment-less-than-sign-state ] }
- [ (comment-state) ]
- } cond ;
-
-: comment-less-than-sign-state ( document n/f string -- document n'/f string )
- next-char-from (comment-less-than-sign-state) ;
-
-
-: (comment-less-than-sign-bang-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: - = ] [ reach push-comment-token comment-less-than-sign-bang-dash-state ] }
- [ (comment-state) ]
- } cond ;
-
-: comment-less-than-sign-bang-state ( document n/f string -- document n'/f string )
- next-char-from (comment-less-than-sign-bang-state) ;
-
-
-: (comment-less-than-sign-bang-dash-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: - = ] [ drop comment-less-than-sign-bang-dash-dash-state ] }
- [ (comment-end-dash-state) ]
- } cond ;
-
-: comment-less-than-sign-bang-dash-state ( document n/f string -- document n'/f string )
- next-char-from (comment-less-than-sign-bang-dash-state) ;
-
-
-: (comment-less-than-sign-bang-dash-dash-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: > = ] [ (comment-end-state) ] }
- { [ dup f = ] [ (comment-end-state) ] }
- [ nested-comment (comment-end-state) ]
- } cond ;
-
-: comment-less-than-sign-bang-dash-dash-state ( document n/f string -- document n'/f string )
- next-char-from (comment-less-than-sign-bang-dash-dash-state) ;
-
-
-: (comment-end-dash-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: - = ] [ drop comment-end-state ] }
- { [ dup f = ] [ eof-in-comment ] }
- [ [ CHAR: - reach push-comment-token ] dip (comment-state) ]
- } cond ;
-
-: comment-end-dash-state ( document n/f string -- document n'/f string )
- next-char-from (comment-end-dash-state) ;
-
-
-: (comment-end-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: > = ] [ drop pick emit-comment-token data-state ] }
- { [ dup CHAR: ! = ] [ drop comment-end-bang-state ] }
- { [ dup CHAR: - = ] [ reach push-comment-token comment-end-state ] }
- { [ dup f = ] [ drop eof-in-comment pick [ emit-comment-token ] [ emit-eof ] bi ] }
- [ [ "--" reach push-all-comment-token ] dip (comment-state) ]
- } cond ;
-
-: comment-end-state ( document n/f string -- document n'/f string )
- next-char-from (comment-end-state) ;
-
-
-: (comment-end-bang-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: - = ] [ drop comment-end-dash-state ] }
- { [ dup CHAR: > = ] [ drop incorrectly-closed-comment pick emit-comment-token data-state ] }
- { [ dup f = ] [ eof-in-comment ] }
- [ [ "--!" reach push-all-comment-token ] dip (comment-state) ]
- } cond ;
-
-: comment-end-bang-state ( document n/f string -- document n'/f string )
- next-char-from (comment-end-bang-state) ;
-
-
-: (doctype-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s" member? ] [ drop before-doctype-name-state ] }
- { [ dup CHAR: > = ] [ (before-doctype-name-state) ] }
- { [ dup f = ] [ drop eof-in-doctype pick [ new-doctype-with-quirks ] [ emit-doctype ] [ emit-eof ] tri ] }
- [ missing-whitespace-before-doctype-name ]
- } cond ;
-
-: doctype-state ( document n/f string -- document n'/f string )
- next-char-from (doctype-state) ;
-
-
-: (before-doctype-name-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s" member? ] [ drop before-doctype-name-state ] }
- { [ dup ascii-upper-alpha? ] [ 0x20 + reach new-doctype-from-ch doctype-name-state ] }
- { [ dup CHAR: \0 = ] [
- drop
- unexpected-null-character
- CHAR: replacement-character reach new-doctype-from-ch
- doctype-name-state
- ] }
- { [ dup CHAR: > = ] [
- drop missing-doctype-name
- pick [ new-doctype-with-quirks ] [ emit-doctype ] bi
- ] }
- { [ dup f = ] [
- drop eof-in-doctype
- pick [ new-doctype-with-quirks ] [ emit-doctype ] [ emit-eof ] tri
- ] }
- [ reach new-doctype-from-ch doctype-name-state ]
- } cond ;
-
-: before-doctype-name-state ( document n/f string -- document n'/f string )
- next-char-from (before-doctype-name-state) ;
-
-
-: (doctype-name-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s" member? ] [ drop after-doctype-name-state ] }
- { [ dup CHAR: > = ] [ drop pick emit-doctype data-state ] }
- { [ dup ascii-upper-alpha? ] [ 0x20 + reach push-doctype-name doctype-name-state ] }
- { [ dup CHAR: \0 = ] [
- drop unexpected-null-character
- CHAR: replacement-character pick push-doctype-name
- doctype-name-state
- ] }
- { [ dup f = ] [ drop eof-in-doctype pick [ emit-doctype ] [ emit-eof ] bi ] } ! force-quirks on for doctype
- [ reach push-doctype-name doctype-name-state ]
- } cond ;
-
-: doctype-name-state ( document n/f string -- document n'/f string )
- next-char-from (doctype-name-state) ;
-
-
-: (after-doctype-name-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s" member? ] [ drop after-doctype-name-state ] }
- { [ dup CHAR: > = ] [ drop pick emit-doctype data-state ] }
- { [ dup f = ] [ eof-in-doctype ] }
- { [ [ "PUBLIC" take-from-insensitive? ] dip swap ] [ drop after-doctype-public-keyword-state ] }
- { [ [ "SYSTEM" take-from-insensitive? ] dip swap ] [ drop after-doctype-system-keyword-state ] }
- [ invalid-character-sequence-after-doctype-name ]
- } cond ;
-
-: after-doctype-name-state ( document n/f string -- document n'/f string )
- next-char-from (after-doctype-name-state) ;
-
-
-: (after-doctype-public-keyword-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s" member? ] [ drop before-doctype-public-identifier-state ] }
- { [ dup CHAR: " = ] [ missing-whitespace-after-doctype-public-keyword ] }
- { [ dup CHAR: ' = ] [ missing-whitespace-after-doctype-public-keyword ] }
- { [ dup CHAR: > = ] [ drop missing-doctype-public-identifier force-quirks data-state ] }
- { [ dup f = ] [ drop eof-in-doctype pick [ emit-doctype ] [ emit-eof ] bi ] }
- [
- missing-quote-before-doctype-public-identifier
- [ reach force-quirks ] dip
- (bogus-doctype-state)
- ]
- } cond ;
-
-: after-doctype-public-keyword-state ( document n/f string -- document n'/f string )
- next-char-from (after-doctype-public-keyword-state) ;
-
-
-: (before-doctype-public-identifier-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s" member? ] [ drop before-doctype-public-identifier-state ] }
- { [ dup CHAR: " = ] [
- drop pick initialize-doctype-public-identifier
- doctype-public-identifier-double-quoted-state
- ] }
- { [ dup CHAR: ' = ] [
- drop pick initialize-doctype-public-identifier
- doctype-public-identifier-single-quoted-state
- ] }
- { [ dup CHAR: > = ] [
- drop missing-doctype-public-identifier
- pick [ force-quirks ] [ emit-doctype ] bi
- data-state
- ] }
- { [ dup f = ] [ drop eof-in-doctype pick [ emit-doctype ] [ emit-eof ] bi ] }
- [
- missing-quote-before-doctype-public-identifier
- [ reach force-quirks ] dip
- (bogus-doctype-state)
- ]
- } cond ;
-
-: before-doctype-public-identifier-state ( document n/f string -- document n'/f string )
- next-char-from (before-doctype-public-identifier-state) ;
-
-
-: (doctype-public-identifier-double-quoted-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: " = ] [ drop after-doctype-public-identifier-state ] }
- { [ dup CHAR: \0 = ] [
- drop
- unexpected-null-character
- CHAR: replacement-character pick push-doctype-public-identifier
- doctype-public-identifier-double-quoted-state
- ] }
- { [ dup CHAR: > = ] [
- drop abrupt-doctype-public-identifier
- pick [ force-quirks ] [ emit-doctype ] bi
- data-state
- ] }
- { [ dup f = ] [
- drop eof-in-doctype
- pick [ force-quirks ] [ emit-doctype ] [ emit-eof ] tri
- ] }
- [ reach push-doctype-public-identifier doctype-public-identifier-double-quoted-state ]
- } cond ;
-
-: doctype-public-identifier-double-quoted-state ( document n/f string -- document n'/f string )
- next-char-from (doctype-public-identifier-double-quoted-state) ;
-
-
-: (doctype-public-identifier-single-quoted-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: ' = ] [ drop after-doctype-public-identifier-state ] }
- { [ dup CHAR: \0 = ] [
- drop
- unexpected-null-character
- CHAR: replacement-character pick push-doctype-public-identifier
- doctype-public-identifier-double-quoted-state
- ] }
- { [ dup CHAR: > = ] [
- drop abrupt-doctype-public-identifier
- pick [ force-quirks ] [ emit-doctype ] bi
- data-state
- ] }
- { [ dup f = ] [
- drop eof-in-doctype
- pick [ force-quirks ] [ emit-doctype ] [ emit-eof ] tri
- ] }
- [ reach push-doctype-public-identifier doctype-public-identifier-single-quoted-state ]
- } cond ;
-
-: doctype-public-identifier-single-quoted-state ( document n/f string -- document n'/f string )
- next-char-from (doctype-public-identifier-single-quoted-state) ;
-
-
-: (after-doctype-public-identifier-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s" member? ] [ drop between-doctype-public-and-system-identifiers-state ] }
- { [ dup CHAR: > = ] [
- drop pick emit-doctype
- data-state
- ] }
- { [ dup CHAR: " = ] [
- drop missing-whitespace-between-doctype-public-and-system-identifiers
- pick initialize-doctype-system-identifier
- doctype-system-identifier-double-quoted-state
- ] }
- { [ dup CHAR: ' = ] [
- drop missing-whitespace-between-doctype-public-and-system-identifiers
- pick initialize-doctype-system-identifier
- doctype-system-identifier-single-quoted-state
- ] }
- { [ dup f = ] [ drop eof-in-doctype pick [ force-quirks ] [ emit-doctype ] [ emit-eof ] tri ] }
- [
- missing-quote-before-doctype-system-identifier
- [ reach force-quirks ] dip
- (bogus-doctype-state)
- ]
- } cond ;
-
-: after-doctype-public-identifier-state ( document n/f string -- document n'/f string )
- next-char-from (after-doctype-public-identifier-state) ;
-
-
-: (between-doctype-public-and-system-identifiers-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s" member? ] [ drop between-doctype-public-and-system-identifiers-state ] }
- { [ dup CHAR: > = ] [
- drop pick emit-doctype
- data-state
- ] }
- { [ dup CHAR: " = ] [
- drop pick initialize-doctype-system-identifier
- doctype-system-identifier-double-quoted-state
- ] }
- { [ dup CHAR: ' = ] [
- drop pick initialize-doctype-system-identifier
- doctype-system-identifier-single-quoted-state
- ] }
- { [ dup f = ] [ drop eof-in-doctype pick [ force-quirks ] [ emit-doctype ] [ emit-eof ] tri ] }
- [
- missing-quote-before-doctype-system-identifier
- [ reach force-quirks ] dip
- (bogus-doctype-state)
- ]
- } cond ;
-
-: between-doctype-public-and-system-identifiers-state ( document n/f string -- document n'/f string )
- next-char-from (between-doctype-public-and-system-identifiers-state) ;
-
-
-: (after-doctype-system-keyword-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s" member? ] [ drop between-doctype-public-and-system-identifiers-state ] }
- { [ dup CHAR: " = ] [
- drop missing-whitespace-after-doctype-system-keyword
- pick initialize-doctype-system-identifier
- doctype-system-identifier-double-quoted-state
- ] }
- { [ dup CHAR: ' = ] [
- drop missing-whitespace-after-doctype-system-keyword
- pick initialize-doctype-system-identifier
- doctype-system-identifier-single-quoted-state
- ] }
- { [ dup CHAR: > = ] [
- drop missing-doctype-system-identifier
- pick [ force-quirks ] [ emit-doctype ] bi
- data-state
- ] }
- { [ dup f = ] [ drop eof-in-doctype pick [ force-quirks ] [ emit-doctype ] [ emit-eof ] tri ] }
- [
- missing-quote-before-doctype-system-identifier
- [ reach force-quirks ] dip
- (bogus-doctype-state)
- ]
- } cond ;
-
-: after-doctype-system-keyword-state ( document n/f string -- document n'/f string )
- next-char-from (after-doctype-system-keyword-state) ;
-
-
-: (before-doctype-system-identifier-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s" member? ] [ drop before-doctype-system-identifier-state ] }
- { [ dup CHAR: " = ] [
- drop pick initialize-doctype-system-identifier
- doctype-system-identifier-double-quoted-state
- ] }
- { [ dup CHAR: ' = ] [
- drop pick initialize-doctype-system-identifier
- doctype-system-identifier-single-quoted-state
- ] }
- { [ dup CHAR: > = ] [
- drop missing-doctype-system-identifier
- pick [ force-quirks ] [ emit-doctype ] bi
- data-state
- ] }
- { [ dup f = ] [ drop eof-in-doctype pick [ emit-doctype ] [ emit-eof ] bi ] }
- [
- missing-quote-before-doctype-system-identifier
- [ reach force-quirks ] dip
- (bogus-doctype-state)
- ]
- } cond ;
-
-: before-doctype-system-identifier-state ( document n/f string -- document n'/f string )
- next-char-from (before-doctype-system-identifier-state) ;
-
-
-: (doctype-system-identifier-double-quoted-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: " = ] [ drop after-doctype-system-identifier-state ] }
- { [ dup CHAR: \0 = ] [
- drop
- unexpected-null-character
- CHAR: replacement-character pick push-doctype-system-identifier
- doctype-system-identifier-double-quoted-state
- ] }
- { [ dup CHAR: > = ] [
- drop abrupt-doctype-system-identifier
- pick [ force-quirks ] [ emit-doctype ] bi
- data-state
- ] }
- { [ dup f = ] [
- drop eof-in-doctype
- pick [ force-quirks ] [ emit-doctype ] [ emit-eof ] tri
- ] }
- [ reach push-doctype-system-identifier doctype-system-identifier-double-quoted-state ]
- } cond ;
-
-: doctype-system-identifier-double-quoted-state ( document n/f string -- document n'/f string )
- next-char-from (doctype-system-identifier-double-quoted-state) ;
-
-
-: (doctype-system-identifier-single-quoted-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: ' = ] [ drop after-doctype-system-identifier-state ] }
- { [ dup CHAR: \0 = ] [
- drop
- unexpected-null-character
- CHAR: replacement-character pick push-doctype-system-identifier
- doctype-system-identifier-double-quoted-state
- ] }
- { [ dup CHAR: > = ] [
- drop abrupt-doctype-system-identifier
- pick [ force-quirks ] [ emit-doctype ] bi
- data-state
- ] }
- { [ dup f = ] [
- drop eof-in-doctype
- pick [ force-quirks ] [ emit-doctype ] [ emit-eof ] tri
- ] }
- [ reach push-doctype-system-identifier doctype-system-identifier-single-quoted-state ]
- } cond ;
-
-: doctype-system-identifier-single-quoted-state ( document n/f string -- document n'/f string )
- next-char-from (doctype-system-identifier-single-quoted-state) ;
-
-
-: (after-doctype-system-identifier-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "\t\n\f\s" member? ] [ drop after-doctype-system-identifier-state ] }
- { [ dup CHAR: > = ] [
- drop pick emit-doctype
- data-state
- ] }
- { [ dup f = ] [ drop eof-in-doctype pick [ force-quirks ] [ emit-doctype ] [ emit-eof ] tri ] }
- [
- unexpected-character-after-doctype-system-identifier
- [ reach force-quirks ] dip
- (bogus-doctype-state)
- ]
- } cond ;
-
-: after-doctype-system-identifier-state ( document n/f string -- document n'/f string )
- next-char-from (after-doctype-system-identifier-state) ;
-
-
-: (bogus-doctype-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: > = ] [ drop pick emit-doctype data-state ] }
- { [ dup CHAR: \0 = ] [ drop unexpected-null-character bogus-doctype-state ] }
- { [ dup f = ] [ drop eof-in-doctype pick emit-eof ] }
- [ drop bogus-doctype-state ]
- } cond ;
-
-: bogus-doctype-state ( document n/f string -- document n'/f string )
- next-char-from (bogus-doctype-state) ;
-
-
-: (cdata-section-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: ] = ] [ drop cdata-section-bracket-state ] }
- { [ dup f = ] [ drop eof-in-cdata pick emit-eof ] }
- [ reach emit-char cdata-section-state ]
- } cond ;
-
-: cdata-section-state ( document n/f string -- document n'/f string )
- next-char-from (cdata-section-state) ;
-
-
-: (cdata-section-bracket-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: ] = ] [ drop cdata-section-end-state ] }
- [ [ CHAR: ] reach emit-char ] dip (cdata-section-state) ]
- } cond ;
-
-: cdata-section-bracket-state ( document n/f string -- document n'/f string )
- next-char-from (cdata-section-bracket-state) ;
-
-
-: (cdata-section-end-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup CHAR: ] = ] [ reach emit-char cdata-section-end-state ] }
- { [ dup CHAR: > = ] [ drop data-state ] }
- [ [ "]]" reach emit-string ] dip (cdata-section-state) ]
- } cond ;
-
-: cdata-section-end-state ( document n/f string -- document n'/f string )
- next-char-from (cdata-section-end-state) ;
-
-
-: (character-reference-state) ( document n/f string ch/f -- document n'/f string )
- [ CHAR: & reach ch>new-temporary-buffer ] dip
- {
- { [ dup ascii-alphanumeric? ] [ (named-character-reference-state) ] }
- { [ dup CHAR: # = ] [ reach push-temporary-buffer numeric-character-reference-state ] }
- [ reach flush-temporary-buffer (return-state) ]
- } cond ;
-
-: character-reference-state ( document n/f string -- document n'/f string )
- next-char-from (character-reference-state) ;
-
-
-: (named-character-reference-state) ( document n/f string ch/f -- document n'/f string )
- reach push-temporary-buffer
- pick named-character-match?
- [
- drop ! exact match, drop prefix match
- ! XXX: check me
- {
- [ pick temporary-buffer-attribute? ]
- [ pick temporary-buffer>> ?last CHAR: ; = not ]
- [ 3dup peek-from { [ CHAR: = = ] [ ascii-alphanumeric? ] } 1|| ]
- } 0&& [
- unimplemented*
- flush-temporary-buffer
- return-state
- ] [
- pick [ take-named-character ] [ flush-temporary-buffer ] bi return-state
- ] if
- ] [
- ! prefix match?
- [ named-character-reference-state ]
- [ pick flush-temporary-buffer ambiguous-ampersand-state ] if
- ] if ;
-
-: named-character-reference-state ( document n/f string -- document n'/f string )
- next-char-from (named-character-reference-state) ;
-
-
-: (ambiguous-ampersand-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup ascii-alphanumeric? ] [
- unimplemented*
- ] }
- { [ dup CHAR: ; = ] [ unknown-named-character-reference (return-state) ] }
- [ (return-state) ]
- } cond ;
-
-: ambiguous-ampersand-state ( document n/f string -- document n'/f string )
- next-char-from (ambiguous-ampersand-state) ;
-
-
-: (numeric-character-reference-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup "xX" member? ] [ reach push-temporary-buffer hexadecimal-character-reference-start-state ] }
- [ (decimal-character-reference-start-state) ]
- } cond ;
-
-: numeric-character-reference-state ( document n/f string -- document n'/f string )
- next-char-from (numeric-character-reference-state) ;
-
-
-: (hexadecimal-character-reference-start-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup ascii-hex-digit? ] [ (hexadecimal-character-reference-state) ] }
- [ absence-of-digits-in-numeric-character-reference reach flush-temporary-buffer (return-state) ]
- } cond ;
-
-: hexadecimal-character-reference-start-state ( document n/f string -- document n'/f string )
- next-char-from (hexadecimal-character-reference-start-state) ;
-
-
-: (decimal-character-reference-start-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup ascii-digit? ] [ (decimal-character-reference-state) ] }
- [ absence-of-digits-in-numeric-character-reference reach flush-temporary-buffer (return-state) ]
- } cond ;
-
-: decimal-character-reference-start-state ( document n/f string -- document n'/f string )
- next-char-from (decimal-character-reference-start-state) ;
-
-
-: (hexadecimal-character-reference-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup ascii-digit? ] [ unimplemented* ] }
- { [ dup ascii-upper-hex-digit? ] [ unimplemented* ] }
- { [ dup ascii-lower-hex-digit? ] [ unimplemented* ] }
- { [ dup CHAR: ; = ] [ drop numeric-character-reference-end-state ] }
- [ missing-semicolon-after-character-reference ]
- } cond ;
-
-: hexadecimal-character-reference-state ( document n/f string -- document n'/f string )
- next-char-from (hexadecimal-character-reference-state) ;
-
-
-: (decimal-character-reference-state) ( document n/f string ch/f -- document n'/f string )
- {
- { [ dup ascii-digit? ] [ unimplemented* ] }
- { [ dup CHAR: ; = ] [ drop numeric-character-reference-end-state ] }
- [ missing-semicolon-after-character-reference ]
- } cond ;
-
-: decimal-character-reference-state ( document n/f string -- document n'/f string )
- next-char-from (decimal-character-reference-state) ;
-
-
-: (numeric-character-reference-end-state) ( document n/f string ch/f -- document n'/f string )
- {
- [ missing-semicolon-after-character-reference ]
- } cond ;
-
-: numeric-character-reference-end-state ( document n/f string -- document n'/f string )
- next-char-from (numeric-character-reference-end-state) ;
-
-
-
-: parse-html5 ( string -- document )
- [ <document> 0 ] dip data-state 2drop ;
\ No newline at end of file
--- /dev/null
+Doug Coleman
--- /dev/null
+{
+ "Æ": { "codepoints": [198], "characters": "\u00C6" },
+ "Æ": { "codepoints": [198], "characters": "\u00C6" },
+ "&": { "codepoints": [38], "characters": "\u0026" },
+ "&": { "codepoints": [38], "characters": "\u0026" },
+ "Á": { "codepoints": [193], "characters": "\u00C1" },
+ "Á": { "codepoints": [193], "characters": "\u00C1" },
+ "Ă": { "codepoints": [258], "characters": "\u0102" },
+ "Â": { "codepoints": [194], "characters": "\u00C2" },
+ "Â": { "codepoints": [194], "characters": "\u00C2" },
+ "А": { "codepoints": [1040], "characters": "\u0410" },
+ "𝔄": { "codepoints": [120068], "characters": "\uD835\uDD04" },
+ "À": { "codepoints": [192], "characters": "\u00C0" },
+ "À": { "codepoints": [192], "characters": "\u00C0" },
+ "Α": { "codepoints": [913], "characters": "\u0391" },
+ "Ā": { "codepoints": [256], "characters": "\u0100" },
+ "⩓": { "codepoints": [10835], "characters": "\u2A53" },
+ "Ą": { "codepoints": [260], "characters": "\u0104" },
+ "𝔸": { "codepoints": [120120], "characters": "\uD835\uDD38" },
+ "⁡": { "codepoints": [8289], "characters": "\u2061" },
+ "Å": { "codepoints": [197], "characters": "\u00C5" },
+ "Å": { "codepoints": [197], "characters": "\u00C5" },
+ "𝒜": { "codepoints": [119964], "characters": "\uD835\uDC9C" },
+ "≔": { "codepoints": [8788], "characters": "\u2254" },
+ "Ã": { "codepoints": [195], "characters": "\u00C3" },
+ "Ã": { "codepoints": [195], "characters": "\u00C3" },
+ "Ä": { "codepoints": [196], "characters": "\u00C4" },
+ "Ä": { "codepoints": [196], "characters": "\u00C4" },
+ "∖": { "codepoints": [8726], "characters": "\u2216" },
+ "⫧": { "codepoints": [10983], "characters": "\u2AE7" },
+ "⌆": { "codepoints": [8966], "characters": "\u2306" },
+ "Б": { "codepoints": [1041], "characters": "\u0411" },
+ "∵": { "codepoints": [8757], "characters": "\u2235" },
+ "ℬ": { "codepoints": [8492], "characters": "\u212C" },
+ "Β": { "codepoints": [914], "characters": "\u0392" },
+ "𝔅": { "codepoints": [120069], "characters": "\uD835\uDD05" },
+ "𝔹": { "codepoints": [120121], "characters": "\uD835\uDD39" },
+ "˘": { "codepoints": [728], "characters": "\u02D8" },
+ "ℬ": { "codepoints": [8492], "characters": "\u212C" },
+ "≎": { "codepoints": [8782], "characters": "\u224E" },
+ "Ч": { "codepoints": [1063], "characters": "\u0427" },
+ "©": { "codepoints": [169], "characters": "\u00A9" },
+ "©": { "codepoints": [169], "characters": "\u00A9" },
+ "Ć": { "codepoints": [262], "characters": "\u0106" },
+ "⋒": { "codepoints": [8914], "characters": "\u22D2" },
+ "ⅅ": { "codepoints": [8517], "characters": "\u2145" },
+ "ℭ": { "codepoints": [8493], "characters": "\u212D" },
+ "Č": { "codepoints": [268], "characters": "\u010C" },
+ "Ç": { "codepoints": [199], "characters": "\u00C7" },
+ "Ç": { "codepoints": [199], "characters": "\u00C7" },
+ "Ĉ": { "codepoints": [264], "characters": "\u0108" },
+ "∰": { "codepoints": [8752], "characters": "\u2230" },
+ "Ċ": { "codepoints": [266], "characters": "\u010A" },
+ "¸": { "codepoints": [184], "characters": "\u00B8" },
+ "·": { "codepoints": [183], "characters": "\u00B7" },
+ "ℭ": { "codepoints": [8493], "characters": "\u212D" },
+ "Χ": { "codepoints": [935], "characters": "\u03A7" },
+ "⊙": { "codepoints": [8857], "characters": "\u2299" },
+ "⊖": { "codepoints": [8854], "characters": "\u2296" },
+ "⊕": { "codepoints": [8853], "characters": "\u2295" },
+ "⊗": { "codepoints": [8855], "characters": "\u2297" },
+ "∲": { "codepoints": [8754], "characters": "\u2232" },
+ "”": { "codepoints": [8221], "characters": "\u201D" },
+ "’": { "codepoints": [8217], "characters": "\u2019" },
+ "∷": { "codepoints": [8759], "characters": "\u2237" },
+ "⩴": { "codepoints": [10868], "characters": "\u2A74" },
+ "≡": { "codepoints": [8801], "characters": "\u2261" },
+ "∯": { "codepoints": [8751], "characters": "\u222F" },
+ "∮": { "codepoints": [8750], "characters": "\u222E" },
+ "ℂ": { "codepoints": [8450], "characters": "\u2102" },
+ "∐": { "codepoints": [8720], "characters": "\u2210" },
+ "∳": { "codepoints": [8755], "characters": "\u2233" },
+ "⨯": { "codepoints": [10799], "characters": "\u2A2F" },
+ "𝒞": { "codepoints": [119966], "characters": "\uD835\uDC9E" },
+ "⋓": { "codepoints": [8915], "characters": "\u22D3" },
+ "≍": { "codepoints": [8781], "characters": "\u224D" },
+ "ⅅ": { "codepoints": [8517], "characters": "\u2145" },
+ "⤑": { "codepoints": [10513], "characters": "\u2911" },
+ "Ђ": { "codepoints": [1026], "characters": "\u0402" },
+ "Ѕ": { "codepoints": [1029], "characters": "\u0405" },
+ "Џ": { "codepoints": [1039], "characters": "\u040F" },
+ "‡": { "codepoints": [8225], "characters": "\u2021" },
+ "↡": { "codepoints": [8609], "characters": "\u21A1" },
+ "⫤": { "codepoints": [10980], "characters": "\u2AE4" },
+ "Ď": { "codepoints": [270], "characters": "\u010E" },
+ "Д": { "codepoints": [1044], "characters": "\u0414" },
+ "∇": { "codepoints": [8711], "characters": "\u2207" },
+ "Δ": { "codepoints": [916], "characters": "\u0394" },
+ "𝔇": { "codepoints": [120071], "characters": "\uD835\uDD07" },
+ "´": { "codepoints": [180], "characters": "\u00B4" },
+ "˙": { "codepoints": [729], "characters": "\u02D9" },
+ "˝": { "codepoints": [733], "characters": "\u02DD" },
+ "`": { "codepoints": [96], "characters": "\u0060" },
+ "˜": { "codepoints": [732], "characters": "\u02DC" },
+ "⋄": { "codepoints": [8900], "characters": "\u22C4" },
+ "ⅆ": { "codepoints": [8518], "characters": "\u2146" },
+ "𝔻": { "codepoints": [120123], "characters": "\uD835\uDD3B" },
+ "¨": { "codepoints": [168], "characters": "\u00A8" },
+ "⃜": { "codepoints": [8412], "characters": "\u20DC" },
+ "≐": { "codepoints": [8784], "characters": "\u2250" },
+ "∯": { "codepoints": [8751], "characters": "\u222F" },
+ "¨": { "codepoints": [168], "characters": "\u00A8" },
+ "⇓": { "codepoints": [8659], "characters": "\u21D3" },
+ "⇐": { "codepoints": [8656], "characters": "\u21D0" },
+ "⇔": { "codepoints": [8660], "characters": "\u21D4" },
+ "⫤": { "codepoints": [10980], "characters": "\u2AE4" },
+ "⟸": { "codepoints": [10232], "characters": "\u27F8" },
+ "⟺": { "codepoints": [10234], "characters": "\u27FA" },
+ "⟹": { "codepoints": [10233], "characters": "\u27F9" },
+ "⇒": { "codepoints": [8658], "characters": "\u21D2" },
+ "⊨": { "codepoints": [8872], "characters": "\u22A8" },
+ "⇑": { "codepoints": [8657], "characters": "\u21D1" },
+ "⇕": { "codepoints": [8661], "characters": "\u21D5" },
+ "∥": { "codepoints": [8741], "characters": "\u2225" },
+ "↓": { "codepoints": [8595], "characters": "\u2193" },
+ "⤓": { "codepoints": [10515], "characters": "\u2913" },
+ "⇵": { "codepoints": [8693], "characters": "\u21F5" },
+ "̑": { "codepoints": [785], "characters": "\u0311" },
+ "⥐": { "codepoints": [10576], "characters": "\u2950" },
+ "⥞": { "codepoints": [10590], "characters": "\u295E" },
+ "↽": { "codepoints": [8637], "characters": "\u21BD" },
+ "⥖": { "codepoints": [10582], "characters": "\u2956" },
+ "⥟": { "codepoints": [10591], "characters": "\u295F" },
+ "⇁": { "codepoints": [8641], "characters": "\u21C1" },
+ "⥗": { "codepoints": [10583], "characters": "\u2957" },
+ "⊤": { "codepoints": [8868], "characters": "\u22A4" },
+ "↧": { "codepoints": [8615], "characters": "\u21A7" },
+ "⇓": { "codepoints": [8659], "characters": "\u21D3" },
+ "𝒟": { "codepoints": [119967], "characters": "\uD835\uDC9F" },
+ "Đ": { "codepoints": [272], "characters": "\u0110" },
+ "Ŋ": { "codepoints": [330], "characters": "\u014A" },
+ "Ð": { "codepoints": [208], "characters": "\u00D0" },
+ "Ð": { "codepoints": [208], "characters": "\u00D0" },
+ "É": { "codepoints": [201], "characters": "\u00C9" },
+ "É": { "codepoints": [201], "characters": "\u00C9" },
+ "Ě": { "codepoints": [282], "characters": "\u011A" },
+ "Ê": { "codepoints": [202], "characters": "\u00CA" },
+ "Ê": { "codepoints": [202], "characters": "\u00CA" },
+ "Э": { "codepoints": [1069], "characters": "\u042D" },
+ "Ė": { "codepoints": [278], "characters": "\u0116" },
+ "𝔈": { "codepoints": [120072], "characters": "\uD835\uDD08" },
+ "È": { "codepoints": [200], "characters": "\u00C8" },
+ "È": { "codepoints": [200], "characters": "\u00C8" },
+ "∈": { "codepoints": [8712], "characters": "\u2208" },
+ "Ē": { "codepoints": [274], "characters": "\u0112" },
+ "◻": { "codepoints": [9723], "characters": "\u25FB" },
+ "▫": { "codepoints": [9643], "characters": "\u25AB" },
+ "Ę": { "codepoints": [280], "characters": "\u0118" },
+ "𝔼": { "codepoints": [120124], "characters": "\uD835\uDD3C" },
+ "Ε": { "codepoints": [917], "characters": "\u0395" },
+ "⩵": { "codepoints": [10869], "characters": "\u2A75" },
+ "≂": { "codepoints": [8770], "characters": "\u2242" },
+ "⇌": { "codepoints": [8652], "characters": "\u21CC" },
+ "ℰ": { "codepoints": [8496], "characters": "\u2130" },
+ "⩳": { "codepoints": [10867], "characters": "\u2A73" },
+ "Η": { "codepoints": [919], "characters": "\u0397" },
+ "Ë": { "codepoints": [203], "characters": "\u00CB" },
+ "Ë": { "codepoints": [203], "characters": "\u00CB" },
+ "∃": { "codepoints": [8707], "characters": "\u2203" },
+ "ⅇ": { "codepoints": [8519], "characters": "\u2147" },
+ "Ф": { "codepoints": [1060], "characters": "\u0424" },
+ "𝔉": { "codepoints": [120073], "characters": "\uD835\uDD09" },
+ "◼": { "codepoints": [9724], "characters": "\u25FC" },
+ "▪": { "codepoints": [9642], "characters": "\u25AA" },
+ "𝔽": { "codepoints": [120125], "characters": "\uD835\uDD3D" },
+ "∀": { "codepoints": [8704], "characters": "\u2200" },
+ "ℱ": { "codepoints": [8497], "characters": "\u2131" },
+ "ℱ": { "codepoints": [8497], "characters": "\u2131" },
+ "Ѓ": { "codepoints": [1027], "characters": "\u0403" },
+ ">": { "codepoints": [62], "characters": "\u003E" },
+ ">": { "codepoints": [62], "characters": "\u003E" },
+ "Γ": { "codepoints": [915], "characters": "\u0393" },
+ "Ϝ": { "codepoints": [988], "characters": "\u03DC" },
+ "Ğ": { "codepoints": [286], "characters": "\u011E" },
+ "Ģ": { "codepoints": [290], "characters": "\u0122" },
+ "Ĝ": { "codepoints": [284], "characters": "\u011C" },
+ "Г": { "codepoints": [1043], "characters": "\u0413" },
+ "Ġ": { "codepoints": [288], "characters": "\u0120" },
+ "𝔊": { "codepoints": [120074], "characters": "\uD835\uDD0A" },
+ "⋙": { "codepoints": [8921], "characters": "\u22D9" },
+ "𝔾": { "codepoints": [120126], "characters": "\uD835\uDD3E" },
+ "≥": { "codepoints": [8805], "characters": "\u2265" },
+ "⋛": { "codepoints": [8923], "characters": "\u22DB" },
+ "≧": { "codepoints": [8807], "characters": "\u2267" },
+ "⪢": { "codepoints": [10914], "characters": "\u2AA2" },
+ "≷": { "codepoints": [8823], "characters": "\u2277" },
+ "⩾": { "codepoints": [10878], "characters": "\u2A7E" },
+ "≳": { "codepoints": [8819], "characters": "\u2273" },
+ "𝒢": { "codepoints": [119970], "characters": "\uD835\uDCA2" },
+ "≫": { "codepoints": [8811], "characters": "\u226B" },
+ "Ъ": { "codepoints": [1066], "characters": "\u042A" },
+ "ˇ": { "codepoints": [711], "characters": "\u02C7" },
+ "^": { "codepoints": [94], "characters": "\u005E" },
+ "Ĥ": { "codepoints": [292], "characters": "\u0124" },
+ "ℌ": { "codepoints": [8460], "characters": "\u210C" },
+ "ℋ": { "codepoints": [8459], "characters": "\u210B" },
+ "ℍ": { "codepoints": [8461], "characters": "\u210D" },
+ "─": { "codepoints": [9472], "characters": "\u2500" },
+ "ℋ": { "codepoints": [8459], "characters": "\u210B" },
+ "Ħ": { "codepoints": [294], "characters": "\u0126" },
+ "≎": { "codepoints": [8782], "characters": "\u224E" },
+ "≏": { "codepoints": [8783], "characters": "\u224F" },
+ "Е": { "codepoints": [1045], "characters": "\u0415" },
+ "IJ": { "codepoints": [306], "characters": "\u0132" },
+ "Ё": { "codepoints": [1025], "characters": "\u0401" },
+ "Í": { "codepoints": [205], "characters": "\u00CD" },
+ "Í": { "codepoints": [205], "characters": "\u00CD" },
+ "Î": { "codepoints": [206], "characters": "\u00CE" },
+ "Î": { "codepoints": [206], "characters": "\u00CE" },
+ "И": { "codepoints": [1048], "characters": "\u0418" },
+ "İ": { "codepoints": [304], "characters": "\u0130" },
+ "ℑ": { "codepoints": [8465], "characters": "\u2111" },
+ "Ì": { "codepoints": [204], "characters": "\u00CC" },
+ "Ì": { "codepoints": [204], "characters": "\u00CC" },
+ "ℑ": { "codepoints": [8465], "characters": "\u2111" },
+ "Ī": { "codepoints": [298], "characters": "\u012A" },
+ "ⅈ": { "codepoints": [8520], "characters": "\u2148" },
+ "⇒": { "codepoints": [8658], "characters": "\u21D2" },
+ "∬": { "codepoints": [8748], "characters": "\u222C" },
+ "∫": { "codepoints": [8747], "characters": "\u222B" },
+ "⋂": { "codepoints": [8898], "characters": "\u22C2" },
+ "⁣": { "codepoints": [8291], "characters": "\u2063" },
+ "⁢": { "codepoints": [8290], "characters": "\u2062" },
+ "Į": { "codepoints": [302], "characters": "\u012E" },
+ "𝕀": { "codepoints": [120128], "characters": "\uD835\uDD40" },
+ "Ι": { "codepoints": [921], "characters": "\u0399" },
+ "ℐ": { "codepoints": [8464], "characters": "\u2110" },
+ "Ĩ": { "codepoints": [296], "characters": "\u0128" },
+ "І": { "codepoints": [1030], "characters": "\u0406" },
+ "Ï": { "codepoints": [207], "characters": "\u00CF" },
+ "Ï": { "codepoints": [207], "characters": "\u00CF" },
+ "Ĵ": { "codepoints": [308], "characters": "\u0134" },
+ "Й": { "codepoints": [1049], "characters": "\u0419" },
+ "𝔍": { "codepoints": [120077], "characters": "\uD835\uDD0D" },
+ "𝕁": { "codepoints": [120129], "characters": "\uD835\uDD41" },
+ "𝒥": { "codepoints": [119973], "characters": "\uD835\uDCA5" },
+ "Ј": { "codepoints": [1032], "characters": "\u0408" },
+ "Є": { "codepoints": [1028], "characters": "\u0404" },
+ "Х": { "codepoints": [1061], "characters": "\u0425" },
+ "Ќ": { "codepoints": [1036], "characters": "\u040C" },
+ "Κ": { "codepoints": [922], "characters": "\u039A" },
+ "Ķ": { "codepoints": [310], "characters": "\u0136" },
+ "К": { "codepoints": [1050], "characters": "\u041A" },
+ "𝔎": { "codepoints": [120078], "characters": "\uD835\uDD0E" },
+ "𝕂": { "codepoints": [120130], "characters": "\uD835\uDD42" },
+ "𝒦": { "codepoints": [119974], "characters": "\uD835\uDCA6" },
+ "Љ": { "codepoints": [1033], "characters": "\u0409" },
+ "<": { "codepoints": [60], "characters": "\u003C" },
+ "<": { "codepoints": [60], "characters": "\u003C" },
+ "Ĺ": { "codepoints": [313], "characters": "\u0139" },
+ "Λ": { "codepoints": [923], "characters": "\u039B" },
+ "⟪": { "codepoints": [10218], "characters": "\u27EA" },
+ "ℒ": { "codepoints": [8466], "characters": "\u2112" },
+ "↞": { "codepoints": [8606], "characters": "\u219E" },
+ "Ľ": { "codepoints": [317], "characters": "\u013D" },
+ "Ļ": { "codepoints": [315], "characters": "\u013B" },
+ "Л": { "codepoints": [1051], "characters": "\u041B" },
+ "⟨": { "codepoints": [10216], "characters": "\u27E8" },
+ "←": { "codepoints": [8592], "characters": "\u2190" },
+ "⇤": { "codepoints": [8676], "characters": "\u21E4" },
+ "⇆": { "codepoints": [8646], "characters": "\u21C6" },
+ "⌈": { "codepoints": [8968], "characters": "\u2308" },
+ "⟦": { "codepoints": [10214], "characters": "\u27E6" },
+ "⥡": { "codepoints": [10593], "characters": "\u2961" },
+ "⇃": { "codepoints": [8643], "characters": "\u21C3" },
+ "⥙": { "codepoints": [10585], "characters": "\u2959" },
+ "⌊": { "codepoints": [8970], "characters": "\u230A" },
+ "↔": { "codepoints": [8596], "characters": "\u2194" },
+ "⥎": { "codepoints": [10574], "characters": "\u294E" },
+ "⊣": { "codepoints": [8867], "characters": "\u22A3" },
+ "↤": { "codepoints": [8612], "characters": "\u21A4" },
+ "⥚": { "codepoints": [10586], "characters": "\u295A" },
+ "⊲": { "codepoints": [8882], "characters": "\u22B2" },
+ "⧏": { "codepoints": [10703], "characters": "\u29CF" },
+ "⊴": { "codepoints": [8884], "characters": "\u22B4" },
+ "⥑": { "codepoints": [10577], "characters": "\u2951" },
+ "⥠": { "codepoints": [10592], "characters": "\u2960" },
+ "↿": { "codepoints": [8639], "characters": "\u21BF" },
+ "⥘": { "codepoints": [10584], "characters": "\u2958" },
+ "↼": { "codepoints": [8636], "characters": "\u21BC" },
+ "⥒": { "codepoints": [10578], "characters": "\u2952" },
+ "⇐": { "codepoints": [8656], "characters": "\u21D0" },
+ "⇔": { "codepoints": [8660], "characters": "\u21D4" },
+ "⋚": { "codepoints": [8922], "characters": "\u22DA" },
+ "≦": { "codepoints": [8806], "characters": "\u2266" },
+ "≶": { "codepoints": [8822], "characters": "\u2276" },
+ "⪡": { "codepoints": [10913], "characters": "\u2AA1" },
+ "⩽": { "codepoints": [10877], "characters": "\u2A7D" },
+ "≲": { "codepoints": [8818], "characters": "\u2272" },
+ "𝔏": { "codepoints": [120079], "characters": "\uD835\uDD0F" },
+ "⋘": { "codepoints": [8920], "characters": "\u22D8" },
+ "⇚": { "codepoints": [8666], "characters": "\u21DA" },
+ "Ŀ": { "codepoints": [319], "characters": "\u013F" },
+ "⟵": { "codepoints": [10229], "characters": "\u27F5" },
+ "⟷": { "codepoints": [10231], "characters": "\u27F7" },
+ "⟶": { "codepoints": [10230], "characters": "\u27F6" },
+ "⟸": { "codepoints": [10232], "characters": "\u27F8" },
+ "⟺": { "codepoints": [10234], "characters": "\u27FA" },
+ "⟹": { "codepoints": [10233], "characters": "\u27F9" },
+ "𝕃": { "codepoints": [120131], "characters": "\uD835\uDD43" },
+ "↙": { "codepoints": [8601], "characters": "\u2199" },
+ "↘": { "codepoints": [8600], "characters": "\u2198" },
+ "ℒ": { "codepoints": [8466], "characters": "\u2112" },
+ "↰": { "codepoints": [8624], "characters": "\u21B0" },
+ "Ł": { "codepoints": [321], "characters": "\u0141" },
+ "≪": { "codepoints": [8810], "characters": "\u226A" },
+ "⤅": { "codepoints": [10501], "characters": "\u2905" },
+ "М": { "codepoints": [1052], "characters": "\u041C" },
+ " ": { "codepoints": [8287], "characters": "\u205F" },
+ "ℳ": { "codepoints": [8499], "characters": "\u2133" },
+ "𝔐": { "codepoints": [120080], "characters": "\uD835\uDD10" },
+ "∓": { "codepoints": [8723], "characters": "\u2213" },
+ "𝕄": { "codepoints": [120132], "characters": "\uD835\uDD44" },
+ "ℳ": { "codepoints": [8499], "characters": "\u2133" },
+ "Μ": { "codepoints": [924], "characters": "\u039C" },
+ "Њ": { "codepoints": [1034], "characters": "\u040A" },
+ "Ń": { "codepoints": [323], "characters": "\u0143" },
+ "Ň": { "codepoints": [327], "characters": "\u0147" },
+ "Ņ": { "codepoints": [325], "characters": "\u0145" },
+ "Н": { "codepoints": [1053], "characters": "\u041D" },
+ "​": { "codepoints": [8203], "characters": "\u200B" },
+ "​": { "codepoints": [8203], "characters": "\u200B" },
+ "​": { "codepoints": [8203], "characters": "\u200B" },
+ "​": { "codepoints": [8203], "characters": "\u200B" },
+ "≫": { "codepoints": [8811], "characters": "\u226B" },
+ "≪": { "codepoints": [8810], "characters": "\u226A" },
+ "
": { "codepoints": [10], "characters": "\u000A" },
+ "𝔑": { "codepoints": [120081], "characters": "\uD835\uDD11" },
+ "⁠": { "codepoints": [8288], "characters": "\u2060" },
+ " ": { "codepoints": [160], "characters": "\u00A0" },
+ "ℕ": { "codepoints": [8469], "characters": "\u2115" },
+ "⫬": { "codepoints": [10988], "characters": "\u2AEC" },
+ "≢": { "codepoints": [8802], "characters": "\u2262" },
+ "≭": { "codepoints": [8813], "characters": "\u226D" },
+ "∦": { "codepoints": [8742], "characters": "\u2226" },
+ "∉": { "codepoints": [8713], "characters": "\u2209" },
+ "≠": { "codepoints": [8800], "characters": "\u2260" },
+ "≂̸": { "codepoints": [8770, 824], "characters": "\u2242\u0338" },
+ "∄": { "codepoints": [8708], "characters": "\u2204" },
+ "≯": { "codepoints": [8815], "characters": "\u226F" },
+ "≱": { "codepoints": [8817], "characters": "\u2271" },
+ "≧̸": { "codepoints": [8807, 824], "characters": "\u2267\u0338" },
+ "≫̸": { "codepoints": [8811, 824], "characters": "\u226B\u0338" },
+ "≹": { "codepoints": [8825], "characters": "\u2279" },
+ "⩾̸": { "codepoints": [10878, 824], "characters": "\u2A7E\u0338" },
+ "≵": { "codepoints": [8821], "characters": "\u2275" },
+ "≎̸": { "codepoints": [8782, 824], "characters": "\u224E\u0338" },
+ "≏̸": { "codepoints": [8783, 824], "characters": "\u224F\u0338" },
+ "⋪": { "codepoints": [8938], "characters": "\u22EA" },
+ "⧏̸": { "codepoints": [10703, 824], "characters": "\u29CF\u0338" },
+ "⋬": { "codepoints": [8940], "characters": "\u22EC" },
+ "≮": { "codepoints": [8814], "characters": "\u226E" },
+ "≰": { "codepoints": [8816], "characters": "\u2270" },
+ "≸": { "codepoints": [8824], "characters": "\u2278" },
+ "≪̸": { "codepoints": [8810, 824], "characters": "\u226A\u0338" },
+ "⩽̸": { "codepoints": [10877, 824], "characters": "\u2A7D\u0338" },
+ "≴": { "codepoints": [8820], "characters": "\u2274" },
+ "⪢̸": { "codepoints": [10914, 824], "characters": "\u2AA2\u0338" },
+ "⪡̸": { "codepoints": [10913, 824], "characters": "\u2AA1\u0338" },
+ "⊀": { "codepoints": [8832], "characters": "\u2280" },
+ "⪯̸": { "codepoints": [10927, 824], "characters": "\u2AAF\u0338" },
+ "⋠": { "codepoints": [8928], "characters": "\u22E0" },
+ "∌": { "codepoints": [8716], "characters": "\u220C" },
+ "⋫": { "codepoints": [8939], "characters": "\u22EB" },
+ "⧐̸": { "codepoints": [10704, 824], "characters": "\u29D0\u0338" },
+ "⋭": { "codepoints": [8941], "characters": "\u22ED" },
+ "⊏̸": { "codepoints": [8847, 824], "characters": "\u228F\u0338" },
+ "⋢": { "codepoints": [8930], "characters": "\u22E2" },
+ "⊐̸": { "codepoints": [8848, 824], "characters": "\u2290\u0338" },
+ "⋣": { "codepoints": [8931], "characters": "\u22E3" },
+ "⊂⃒": { "codepoints": [8834, 8402], "characters": "\u2282\u20D2" },
+ "⊈": { "codepoints": [8840], "characters": "\u2288" },
+ "⊁": { "codepoints": [8833], "characters": "\u2281" },
+ "⪰̸": { "codepoints": [10928, 824], "characters": "\u2AB0\u0338" },
+ "⋡": { "codepoints": [8929], "characters": "\u22E1" },
+ "≿̸": { "codepoints": [8831, 824], "characters": "\u227F\u0338" },
+ "⊃⃒": { "codepoints": [8835, 8402], "characters": "\u2283\u20D2" },
+ "⊉": { "codepoints": [8841], "characters": "\u2289" },
+ "≁": { "codepoints": [8769], "characters": "\u2241" },
+ "≄": { "codepoints": [8772], "characters": "\u2244" },
+ "≇": { "codepoints": [8775], "characters": "\u2247" },
+ "≉": { "codepoints": [8777], "characters": "\u2249" },
+ "∤": { "codepoints": [8740], "characters": "\u2224" },
+ "𝒩": { "codepoints": [119977], "characters": "\uD835\uDCA9" },
+ "Ñ": { "codepoints": [209], "characters": "\u00D1" },
+ "Ñ": { "codepoints": [209], "characters": "\u00D1" },
+ "Ν": { "codepoints": [925], "characters": "\u039D" },
+ "Œ": { "codepoints": [338], "characters": "\u0152" },
+ "Ó": { "codepoints": [211], "characters": "\u00D3" },
+ "Ó": { "codepoints": [211], "characters": "\u00D3" },
+ "Ô": { "codepoints": [212], "characters": "\u00D4" },
+ "Ô": { "codepoints": [212], "characters": "\u00D4" },
+ "О": { "codepoints": [1054], "characters": "\u041E" },
+ "Ő": { "codepoints": [336], "characters": "\u0150" },
+ "𝔒": { "codepoints": [120082], "characters": "\uD835\uDD12" },
+ "Ò": { "codepoints": [210], "characters": "\u00D2" },
+ "Ò": { "codepoints": [210], "characters": "\u00D2" },
+ "Ō": { "codepoints": [332], "characters": "\u014C" },
+ "Ω": { "codepoints": [937], "characters": "\u03A9" },
+ "Ο": { "codepoints": [927], "characters": "\u039F" },
+ "𝕆": { "codepoints": [120134], "characters": "\uD835\uDD46" },
+ "“": { "codepoints": [8220], "characters": "\u201C" },
+ "‘": { "codepoints": [8216], "characters": "\u2018" },
+ "⩔": { "codepoints": [10836], "characters": "\u2A54" },
+ "𝒪": { "codepoints": [119978], "characters": "\uD835\uDCAA" },
+ "Ø": { "codepoints": [216], "characters": "\u00D8" },
+ "Ø": { "codepoints": [216], "characters": "\u00D8" },
+ "Õ": { "codepoints": [213], "characters": "\u00D5" },
+ "Õ": { "codepoints": [213], "characters": "\u00D5" },
+ "⨷": { "codepoints": [10807], "characters": "\u2A37" },
+ "Ö": { "codepoints": [214], "characters": "\u00D6" },
+ "Ö": { "codepoints": [214], "characters": "\u00D6" },
+ "‾": { "codepoints": [8254], "characters": "\u203E" },
+ "⏞": { "codepoints": [9182], "characters": "\u23DE" },
+ "⎴": { "codepoints": [9140], "characters": "\u23B4" },
+ "⏜": { "codepoints": [9180], "characters": "\u23DC" },
+ "∂": { "codepoints": [8706], "characters": "\u2202" },
+ "П": { "codepoints": [1055], "characters": "\u041F" },
+ "𝔓": { "codepoints": [120083], "characters": "\uD835\uDD13" },
+ "Φ": { "codepoints": [934], "characters": "\u03A6" },
+ "Π": { "codepoints": [928], "characters": "\u03A0" },
+ "±": { "codepoints": [177], "characters": "\u00B1" },
+ "ℌ": { "codepoints": [8460], "characters": "\u210C" },
+ "ℙ": { "codepoints": [8473], "characters": "\u2119" },
+ "⪻": { "codepoints": [10939], "characters": "\u2ABB" },
+ "≺": { "codepoints": [8826], "characters": "\u227A" },
+ "⪯": { "codepoints": [10927], "characters": "\u2AAF" },
+ "≼": { "codepoints": [8828], "characters": "\u227C" },
+ "≾": { "codepoints": [8830], "characters": "\u227E" },
+ "″": { "codepoints": [8243], "characters": "\u2033" },
+ "∏": { "codepoints": [8719], "characters": "\u220F" },
+ "∷": { "codepoints": [8759], "characters": "\u2237" },
+ "∝": { "codepoints": [8733], "characters": "\u221D" },
+ "𝒫": { "codepoints": [119979], "characters": "\uD835\uDCAB" },
+ "Ψ": { "codepoints": [936], "characters": "\u03A8" },
+ """: { "codepoints": [34], "characters": "\u0022" },
+ """: { "codepoints": [34], "characters": "\u0022" },
+ "𝔔": { "codepoints": [120084], "characters": "\uD835\uDD14" },
+ "ℚ": { "codepoints": [8474], "characters": "\u211A" },
+ "𝒬": { "codepoints": [119980], "characters": "\uD835\uDCAC" },
+ "⤐": { "codepoints": [10512], "characters": "\u2910" },
+ "®": { "codepoints": [174], "characters": "\u00AE" },
+ "®": { "codepoints": [174], "characters": "\u00AE" },
+ "Ŕ": { "codepoints": [340], "characters": "\u0154" },
+ "⟫": { "codepoints": [10219], "characters": "\u27EB" },
+ "↠": { "codepoints": [8608], "characters": "\u21A0" },
+ "⤖": { "codepoints": [10518], "characters": "\u2916" },
+ "Ř": { "codepoints": [344], "characters": "\u0158" },
+ "Ŗ": { "codepoints": [342], "characters": "\u0156" },
+ "Р": { "codepoints": [1056], "characters": "\u0420" },
+ "ℜ": { "codepoints": [8476], "characters": "\u211C" },
+ "∋": { "codepoints": [8715], "characters": "\u220B" },
+ "⇋": { "codepoints": [8651], "characters": "\u21CB" },
+ "⥯": { "codepoints": [10607], "characters": "\u296F" },
+ "ℜ": { "codepoints": [8476], "characters": "\u211C" },
+ "Ρ": { "codepoints": [929], "characters": "\u03A1" },
+ "⟩": { "codepoints": [10217], "characters": "\u27E9" },
+ "→": { "codepoints": [8594], "characters": "\u2192" },
+ "⇥": { "codepoints": [8677], "characters": "\u21E5" },
+ "⇄": { "codepoints": [8644], "characters": "\u21C4" },
+ "⌉": { "codepoints": [8969], "characters": "\u2309" },
+ "⟧": { "codepoints": [10215], "characters": "\u27E7" },
+ "⥝": { "codepoints": [10589], "characters": "\u295D" },
+ "⇂": { "codepoints": [8642], "characters": "\u21C2" },
+ "⥕": { "codepoints": [10581], "characters": "\u2955" },
+ "⌋": { "codepoints": [8971], "characters": "\u230B" },
+ "⊢": { "codepoints": [8866], "characters": "\u22A2" },
+ "↦": { "codepoints": [8614], "characters": "\u21A6" },
+ "⥛": { "codepoints": [10587], "characters": "\u295B" },
+ "⊳": { "codepoints": [8883], "characters": "\u22B3" },
+ "⧐": { "codepoints": [10704], "characters": "\u29D0" },
+ "⊵": { "codepoints": [8885], "characters": "\u22B5" },
+ "⥏": { "codepoints": [10575], "characters": "\u294F" },
+ "⥜": { "codepoints": [10588], "characters": "\u295C" },
+ "↾": { "codepoints": [8638], "characters": "\u21BE" },
+ "⥔": { "codepoints": [10580], "characters": "\u2954" },
+ "⇀": { "codepoints": [8640], "characters": "\u21C0" },
+ "⥓": { "codepoints": [10579], "characters": "\u2953" },
+ "⇒": { "codepoints": [8658], "characters": "\u21D2" },
+ "ℝ": { "codepoints": [8477], "characters": "\u211D" },
+ "⥰": { "codepoints": [10608], "characters": "\u2970" },
+ "⇛": { "codepoints": [8667], "characters": "\u21DB" },
+ "ℛ": { "codepoints": [8475], "characters": "\u211B" },
+ "↱": { "codepoints": [8625], "characters": "\u21B1" },
+ "⧴": { "codepoints": [10740], "characters": "\u29F4" },
+ "Щ": { "codepoints": [1065], "characters": "\u0429" },
+ "Ш": { "codepoints": [1064], "characters": "\u0428" },
+ "Ь": { "codepoints": [1068], "characters": "\u042C" },
+ "Ś": { "codepoints": [346], "characters": "\u015A" },
+ "⪼": { "codepoints": [10940], "characters": "\u2ABC" },
+ "Š": { "codepoints": [352], "characters": "\u0160" },
+ "Ş": { "codepoints": [350], "characters": "\u015E" },
+ "Ŝ": { "codepoints": [348], "characters": "\u015C" },
+ "С": { "codepoints": [1057], "characters": "\u0421" },
+ "𝔖": { "codepoints": [120086], "characters": "\uD835\uDD16" },
+ "↓": { "codepoints": [8595], "characters": "\u2193" },
+ "←": { "codepoints": [8592], "characters": "\u2190" },
+ "→": { "codepoints": [8594], "characters": "\u2192" },
+ "↑": { "codepoints": [8593], "characters": "\u2191" },
+ "Σ": { "codepoints": [931], "characters": "\u03A3" },
+ "∘": { "codepoints": [8728], "characters": "\u2218" },
+ "𝕊": { "codepoints": [120138], "characters": "\uD835\uDD4A" },
+ "√": { "codepoints": [8730], "characters": "\u221A" },
+ "□": { "codepoints": [9633], "characters": "\u25A1" },
+ "⊓": { "codepoints": [8851], "characters": "\u2293" },
+ "⊏": { "codepoints": [8847], "characters": "\u228F" },
+ "⊑": { "codepoints": [8849], "characters": "\u2291" },
+ "⊐": { "codepoints": [8848], "characters": "\u2290" },
+ "⊒": { "codepoints": [8850], "characters": "\u2292" },
+ "⊔": { "codepoints": [8852], "characters": "\u2294" },
+ "𝒮": { "codepoints": [119982], "characters": "\uD835\uDCAE" },
+ "⋆": { "codepoints": [8902], "characters": "\u22C6" },
+ "⋐": { "codepoints": [8912], "characters": "\u22D0" },
+ "⋐": { "codepoints": [8912], "characters": "\u22D0" },
+ "⊆": { "codepoints": [8838], "characters": "\u2286" },
+ "≻": { "codepoints": [8827], "characters": "\u227B" },
+ "⪰": { "codepoints": [10928], "characters": "\u2AB0" },
+ "≽": { "codepoints": [8829], "characters": "\u227D" },
+ "≿": { "codepoints": [8831], "characters": "\u227F" },
+ "∋": { "codepoints": [8715], "characters": "\u220B" },
+ "∑": { "codepoints": [8721], "characters": "\u2211" },
+ "⋑": { "codepoints": [8913], "characters": "\u22D1" },
+ "⊃": { "codepoints": [8835], "characters": "\u2283" },
+ "⊇": { "codepoints": [8839], "characters": "\u2287" },
+ "⋑": { "codepoints": [8913], "characters": "\u22D1" },
+ "Þ": { "codepoints": [222], "characters": "\u00DE" },
+ "Þ": { "codepoints": [222], "characters": "\u00DE" },
+ "™": { "codepoints": [8482], "characters": "\u2122" },
+ "Ћ": { "codepoints": [1035], "characters": "\u040B" },
+ "Ц": { "codepoints": [1062], "characters": "\u0426" },
+ "	": { "codepoints": [9], "characters": "\u0009" },
+ "Τ": { "codepoints": [932], "characters": "\u03A4" },
+ "Ť": { "codepoints": [356], "characters": "\u0164" },
+ "Ţ": { "codepoints": [354], "characters": "\u0162" },
+ "Т": { "codepoints": [1058], "characters": "\u0422" },
+ "𝔗": { "codepoints": [120087], "characters": "\uD835\uDD17" },
+ "∴": { "codepoints": [8756], "characters": "\u2234" },
+ "Θ": { "codepoints": [920], "characters": "\u0398" },
+ "  ": { "codepoints": [8287, 8202], "characters": "\u205F\u200A" },
+ " ": { "codepoints": [8201], "characters": "\u2009" },
+ "∼": { "codepoints": [8764], "characters": "\u223C" },
+ "≃": { "codepoints": [8771], "characters": "\u2243" },
+ "≅": { "codepoints": [8773], "characters": "\u2245" },
+ "≈": { "codepoints": [8776], "characters": "\u2248" },
+ "𝕋": { "codepoints": [120139], "characters": "\uD835\uDD4B" },
+ "⃛": { "codepoints": [8411], "characters": "\u20DB" },
+ "𝒯": { "codepoints": [119983], "characters": "\uD835\uDCAF" },
+ "Ŧ": { "codepoints": [358], "characters": "\u0166" },
+ "Ú": { "codepoints": [218], "characters": "\u00DA" },
+ "Ú": { "codepoints": [218], "characters": "\u00DA" },
+ "↟": { "codepoints": [8607], "characters": "\u219F" },
+ "⥉": { "codepoints": [10569], "characters": "\u2949" },
+ "Ў": { "codepoints": [1038], "characters": "\u040E" },
+ "Ŭ": { "codepoints": [364], "characters": "\u016C" },
+ "Û": { "codepoints": [219], "characters": "\u00DB" },
+ "Û": { "codepoints": [219], "characters": "\u00DB" },
+ "У": { "codepoints": [1059], "characters": "\u0423" },
+ "Ű": { "codepoints": [368], "characters": "\u0170" },
+ "𝔘": { "codepoints": [120088], "characters": "\uD835\uDD18" },
+ "Ù": { "codepoints": [217], "characters": "\u00D9" },
+ "Ù": { "codepoints": [217], "characters": "\u00D9" },
+ "Ū": { "codepoints": [362], "characters": "\u016A" },
+ "_": { "codepoints": [95], "characters": "\u005F" },
+ "⏟": { "codepoints": [9183], "characters": "\u23DF" },
+ "⎵": { "codepoints": [9141], "characters": "\u23B5" },
+ "⏝": { "codepoints": [9181], "characters": "\u23DD" },
+ "⋃": { "codepoints": [8899], "characters": "\u22C3" },
+ "⊎": { "codepoints": [8846], "characters": "\u228E" },
+ "Ų": { "codepoints": [370], "characters": "\u0172" },
+ "𝕌": { "codepoints": [120140], "characters": "\uD835\uDD4C" },
+ "↑": { "codepoints": [8593], "characters": "\u2191" },
+ "⤒": { "codepoints": [10514], "characters": "\u2912" },
+ "⇅": { "codepoints": [8645], "characters": "\u21C5" },
+ "↕": { "codepoints": [8597], "characters": "\u2195" },
+ "⥮": { "codepoints": [10606], "characters": "\u296E" },
+ "⊥": { "codepoints": [8869], "characters": "\u22A5" },
+ "↥": { "codepoints": [8613], "characters": "\u21A5" },
+ "⇑": { "codepoints": [8657], "characters": "\u21D1" },
+ "⇕": { "codepoints": [8661], "characters": "\u21D5" },
+ "↖": { "codepoints": [8598], "characters": "\u2196" },
+ "↗": { "codepoints": [8599], "characters": "\u2197" },
+ "ϒ": { "codepoints": [978], "characters": "\u03D2" },
+ "Υ": { "codepoints": [933], "characters": "\u03A5" },
+ "Ů": { "codepoints": [366], "characters": "\u016E" },
+ "𝒰": { "codepoints": [119984], "characters": "\uD835\uDCB0" },
+ "Ũ": { "codepoints": [360], "characters": "\u0168" },
+ "Ü": { "codepoints": [220], "characters": "\u00DC" },
+ "Ü": { "codepoints": [220], "characters": "\u00DC" },
+ "⊫": { "codepoints": [8875], "characters": "\u22AB" },
+ "⫫": { "codepoints": [10987], "characters": "\u2AEB" },
+ "В": { "codepoints": [1042], "characters": "\u0412" },
+ "⊩": { "codepoints": [8873], "characters": "\u22A9" },
+ "⫦": { "codepoints": [10982], "characters": "\u2AE6" },
+ "⋁": { "codepoints": [8897], "characters": "\u22C1" },
+ "‖": { "codepoints": [8214], "characters": "\u2016" },
+ "‖": { "codepoints": [8214], "characters": "\u2016" },
+ "∣": { "codepoints": [8739], "characters": "\u2223" },
+ "|": { "codepoints": [124], "characters": "\u007C" },
+ "❘": { "codepoints": [10072], "characters": "\u2758" },
+ "≀": { "codepoints": [8768], "characters": "\u2240" },
+ " ": { "codepoints": [8202], "characters": "\u200A" },
+ "𝔙": { "codepoints": [120089], "characters": "\uD835\uDD19" },
+ "𝕍": { "codepoints": [120141], "characters": "\uD835\uDD4D" },
+ "𝒱": { "codepoints": [119985], "characters": "\uD835\uDCB1" },
+ "⊪": { "codepoints": [8874], "characters": "\u22AA" },
+ "Ŵ": { "codepoints": [372], "characters": "\u0174" },
+ "⋀": { "codepoints": [8896], "characters": "\u22C0" },
+ "𝔚": { "codepoints": [120090], "characters": "\uD835\uDD1A" },
+ "𝕎": { "codepoints": [120142], "characters": "\uD835\uDD4E" },
+ "𝒲": { "codepoints": [119986], "characters": "\uD835\uDCB2" },
+ "𝔛": { "codepoints": [120091], "characters": "\uD835\uDD1B" },
+ "Ξ": { "codepoints": [926], "characters": "\u039E" },
+ "𝕏": { "codepoints": [120143], "characters": "\uD835\uDD4F" },
+ "𝒳": { "codepoints": [119987], "characters": "\uD835\uDCB3" },
+ "Я": { "codepoints": [1071], "characters": "\u042F" },
+ "Ї": { "codepoints": [1031], "characters": "\u0407" },
+ "Ю": { "codepoints": [1070], "characters": "\u042E" },
+ "Ý": { "codepoints": [221], "characters": "\u00DD" },
+ "Ý": { "codepoints": [221], "characters": "\u00DD" },
+ "Ŷ": { "codepoints": [374], "characters": "\u0176" },
+ "Ы": { "codepoints": [1067], "characters": "\u042B" },
+ "𝔜": { "codepoints": [120092], "characters": "\uD835\uDD1C" },
+ "𝕐": { "codepoints": [120144], "characters": "\uD835\uDD50" },
+ "𝒴": { "codepoints": [119988], "characters": "\uD835\uDCB4" },
+ "Ÿ": { "codepoints": [376], "characters": "\u0178" },
+ "Ж": { "codepoints": [1046], "characters": "\u0416" },
+ "Ź": { "codepoints": [377], "characters": "\u0179" },
+ "Ž": { "codepoints": [381], "characters": "\u017D" },
+ "З": { "codepoints": [1047], "characters": "\u0417" },
+ "Ż": { "codepoints": [379], "characters": "\u017B" },
+ "​": { "codepoints": [8203], "characters": "\u200B" },
+ "Ζ": { "codepoints": [918], "characters": "\u0396" },
+ "ℨ": { "codepoints": [8488], "characters": "\u2128" },
+ "ℤ": { "codepoints": [8484], "characters": "\u2124" },
+ "𝒵": { "codepoints": [119989], "characters": "\uD835\uDCB5" },
+ "á": { "codepoints": [225], "characters": "\u00E1" },
+ "á": { "codepoints": [225], "characters": "\u00E1" },
+ "ă": { "codepoints": [259], "characters": "\u0103" },
+ "∾": { "codepoints": [8766], "characters": "\u223E" },
+ "∾̳": { "codepoints": [8766, 819], "characters": "\u223E\u0333" },
+ "∿": { "codepoints": [8767], "characters": "\u223F" },
+ "â": { "codepoints": [226], "characters": "\u00E2" },
+ "â": { "codepoints": [226], "characters": "\u00E2" },
+ "´": { "codepoints": [180], "characters": "\u00B4" },
+ "´": { "codepoints": [180], "characters": "\u00B4" },
+ "а": { "codepoints": [1072], "characters": "\u0430" },
+ "æ": { "codepoints": [230], "characters": "\u00E6" },
+ "æ": { "codepoints": [230], "characters": "\u00E6" },
+ "⁡": { "codepoints": [8289], "characters": "\u2061" },
+ "𝔞": { "codepoints": [120094], "characters": "\uD835\uDD1E" },
+ "à": { "codepoints": [224], "characters": "\u00E0" },
+ "à": { "codepoints": [224], "characters": "\u00E0" },
+ "ℵ": { "codepoints": [8501], "characters": "\u2135" },
+ "ℵ": { "codepoints": [8501], "characters": "\u2135" },
+ "α": { "codepoints": [945], "characters": "\u03B1" },
+ "ā": { "codepoints": [257], "characters": "\u0101" },
+ "⨿": { "codepoints": [10815], "characters": "\u2A3F" },
+ "&": { "codepoints": [38], "characters": "\u0026" },
+ "&": { "codepoints": [38], "characters": "\u0026" },
+ "∧": { "codepoints": [8743], "characters": "\u2227" },
+ "⩕": { "codepoints": [10837], "characters": "\u2A55" },
+ "⩜": { "codepoints": [10844], "characters": "\u2A5C" },
+ "⩘": { "codepoints": [10840], "characters": "\u2A58" },
+ "⩚": { "codepoints": [10842], "characters": "\u2A5A" },
+ "∠": { "codepoints": [8736], "characters": "\u2220" },
+ "⦤": { "codepoints": [10660], "characters": "\u29A4" },
+ "∠": { "codepoints": [8736], "characters": "\u2220" },
+ "∡": { "codepoints": [8737], "characters": "\u2221" },
+ "⦨": { "codepoints": [10664], "characters": "\u29A8" },
+ "⦩": { "codepoints": [10665], "characters": "\u29A9" },
+ "⦪": { "codepoints": [10666], "characters": "\u29AA" },
+ "⦫": { "codepoints": [10667], "characters": "\u29AB" },
+ "⦬": { "codepoints": [10668], "characters": "\u29AC" },
+ "⦭": { "codepoints": [10669], "characters": "\u29AD" },
+ "⦮": { "codepoints": [10670], "characters": "\u29AE" },
+ "⦯": { "codepoints": [10671], "characters": "\u29AF" },
+ "∟": { "codepoints": [8735], "characters": "\u221F" },
+ "⊾": { "codepoints": [8894], "characters": "\u22BE" },
+ "⦝": { "codepoints": [10653], "characters": "\u299D" },
+ "∢": { "codepoints": [8738], "characters": "\u2222" },
+ "Å": { "codepoints": [197], "characters": "\u00C5" },
+ "⍼": { "codepoints": [9084], "characters": "\u237C" },
+ "ą": { "codepoints": [261], "characters": "\u0105" },
+ "𝕒": { "codepoints": [120146], "characters": "\uD835\uDD52" },
+ "≈": { "codepoints": [8776], "characters": "\u2248" },
+ "⩰": { "codepoints": [10864], "characters": "\u2A70" },
+ "⩯": { "codepoints": [10863], "characters": "\u2A6F" },
+ "≊": { "codepoints": [8778], "characters": "\u224A" },
+ "≋": { "codepoints": [8779], "characters": "\u224B" },
+ "'": { "codepoints": [39], "characters": "\u0027" },
+ "≈": { "codepoints": [8776], "characters": "\u2248" },
+ "≊": { "codepoints": [8778], "characters": "\u224A" },
+ "å": { "codepoints": [229], "characters": "\u00E5" },
+ "å": { "codepoints": [229], "characters": "\u00E5" },
+ "𝒶": { "codepoints": [119990], "characters": "\uD835\uDCB6" },
+ "*": { "codepoints": [42], "characters": "\u002A" },
+ "≈": { "codepoints": [8776], "characters": "\u2248" },
+ "≍": { "codepoints": [8781], "characters": "\u224D" },
+ "ã": { "codepoints": [227], "characters": "\u00E3" },
+ "ã": { "codepoints": [227], "characters": "\u00E3" },
+ "ä": { "codepoints": [228], "characters": "\u00E4" },
+ "ä": { "codepoints": [228], "characters": "\u00E4" },
+ "∳": { "codepoints": [8755], "characters": "\u2233" },
+ "⨑": { "codepoints": [10769], "characters": "\u2A11" },
+ "⫭": { "codepoints": [10989], "characters": "\u2AED" },
+ "≌": { "codepoints": [8780], "characters": "\u224C" },
+ "϶": { "codepoints": [1014], "characters": "\u03F6" },
+ "‵": { "codepoints": [8245], "characters": "\u2035" },
+ "∽": { "codepoints": [8765], "characters": "\u223D" },
+ "⋍": { "codepoints": [8909], "characters": "\u22CD" },
+ "⊽": { "codepoints": [8893], "characters": "\u22BD" },
+ "⌅": { "codepoints": [8965], "characters": "\u2305" },
+ "⌅": { "codepoints": [8965], "characters": "\u2305" },
+ "⎵": { "codepoints": [9141], "characters": "\u23B5" },
+ "⎶": { "codepoints": [9142], "characters": "\u23B6" },
+ "≌": { "codepoints": [8780], "characters": "\u224C" },
+ "б": { "codepoints": [1073], "characters": "\u0431" },
+ "„": { "codepoints": [8222], "characters": "\u201E" },
+ "∵": { "codepoints": [8757], "characters": "\u2235" },
+ "∵": { "codepoints": [8757], "characters": "\u2235" },
+ "⦰": { "codepoints": [10672], "characters": "\u29B0" },
+ "϶": { "codepoints": [1014], "characters": "\u03F6" },
+ "ℬ": { "codepoints": [8492], "characters": "\u212C" },
+ "β": { "codepoints": [946], "characters": "\u03B2" },
+ "ℶ": { "codepoints": [8502], "characters": "\u2136" },
+ "≬": { "codepoints": [8812], "characters": "\u226C" },
+ "𝔟": { "codepoints": [120095], "characters": "\uD835\uDD1F" },
+ "⋂": { "codepoints": [8898], "characters": "\u22C2" },
+ "◯": { "codepoints": [9711], "characters": "\u25EF" },
+ "⋃": { "codepoints": [8899], "characters": "\u22C3" },
+ "⨀": { "codepoints": [10752], "characters": "\u2A00" },
+ "⨁": { "codepoints": [10753], "characters": "\u2A01" },
+ "⨂": { "codepoints": [10754], "characters": "\u2A02" },
+ "⨆": { "codepoints": [10758], "characters": "\u2A06" },
+ "★": { "codepoints": [9733], "characters": "\u2605" },
+ "▽": { "codepoints": [9661], "characters": "\u25BD" },
+ "△": { "codepoints": [9651], "characters": "\u25B3" },
+ "⨄": { "codepoints": [10756], "characters": "\u2A04" },
+ "⋁": { "codepoints": [8897], "characters": "\u22C1" },
+ "⋀": { "codepoints": [8896], "characters": "\u22C0" },
+ "⤍": { "codepoints": [10509], "characters": "\u290D" },
+ "⧫": { "codepoints": [10731], "characters": "\u29EB" },
+ "▪": { "codepoints": [9642], "characters": "\u25AA" },
+ "▴": { "codepoints": [9652], "characters": "\u25B4" },
+ "▾": { "codepoints": [9662], "characters": "\u25BE" },
+ "◂": { "codepoints": [9666], "characters": "\u25C2" },
+ "▸": { "codepoints": [9656], "characters": "\u25B8" },
+ "␣": { "codepoints": [9251], "characters": "\u2423" },
+ "▒": { "codepoints": [9618], "characters": "\u2592" },
+ "░": { "codepoints": [9617], "characters": "\u2591" },
+ "▓": { "codepoints": [9619], "characters": "\u2593" },
+ "█": { "codepoints": [9608], "characters": "\u2588" },
+ "=⃥": { "codepoints": [61, 8421], "characters": "\u003D\u20E5" },
+ "≡⃥": { "codepoints": [8801, 8421], "characters": "\u2261\u20E5" },
+ "⌐": { "codepoints": [8976], "characters": "\u2310" },
+ "𝕓": { "codepoints": [120147], "characters": "\uD835\uDD53" },
+ "⊥": { "codepoints": [8869], "characters": "\u22A5" },
+ "⊥": { "codepoints": [8869], "characters": "\u22A5" },
+ "⋈": { "codepoints": [8904], "characters": "\u22C8" },
+ "╗": { "codepoints": [9559], "characters": "\u2557" },
+ "╔": { "codepoints": [9556], "characters": "\u2554" },
+ "╖": { "codepoints": [9558], "characters": "\u2556" },
+ "╓": { "codepoints": [9555], "characters": "\u2553" },
+ "═": { "codepoints": [9552], "characters": "\u2550" },
+ "╦": { "codepoints": [9574], "characters": "\u2566" },
+ "╩": { "codepoints": [9577], "characters": "\u2569" },
+ "╤": { "codepoints": [9572], "characters": "\u2564" },
+ "╧": { "codepoints": [9575], "characters": "\u2567" },
+ "╝": { "codepoints": [9565], "characters": "\u255D" },
+ "╚": { "codepoints": [9562], "characters": "\u255A" },
+ "╜": { "codepoints": [9564], "characters": "\u255C" },
+ "╙": { "codepoints": [9561], "characters": "\u2559" },
+ "║": { "codepoints": [9553], "characters": "\u2551" },
+ "╬": { "codepoints": [9580], "characters": "\u256C" },
+ "╣": { "codepoints": [9571], "characters": "\u2563" },
+ "╠": { "codepoints": [9568], "characters": "\u2560" },
+ "╫": { "codepoints": [9579], "characters": "\u256B" },
+ "╢": { "codepoints": [9570], "characters": "\u2562" },
+ "╟": { "codepoints": [9567], "characters": "\u255F" },
+ "⧉": { "codepoints": [10697], "characters": "\u29C9" },
+ "╕": { "codepoints": [9557], "characters": "\u2555" },
+ "╒": { "codepoints": [9554], "characters": "\u2552" },
+ "┐": { "codepoints": [9488], "characters": "\u2510" },
+ "┌": { "codepoints": [9484], "characters": "\u250C" },
+ "─": { "codepoints": [9472], "characters": "\u2500" },
+ "╥": { "codepoints": [9573], "characters": "\u2565" },
+ "╨": { "codepoints": [9576], "characters": "\u2568" },
+ "┬": { "codepoints": [9516], "characters": "\u252C" },
+ "┴": { "codepoints": [9524], "characters": "\u2534" },
+ "⊟": { "codepoints": [8863], "characters": "\u229F" },
+ "⊞": { "codepoints": [8862], "characters": "\u229E" },
+ "⊠": { "codepoints": [8864], "characters": "\u22A0" },
+ "╛": { "codepoints": [9563], "characters": "\u255B" },
+ "╘": { "codepoints": [9560], "characters": "\u2558" },
+ "┘": { "codepoints": [9496], "characters": "\u2518" },
+ "└": { "codepoints": [9492], "characters": "\u2514" },
+ "│": { "codepoints": [9474], "characters": "\u2502" },
+ "╪": { "codepoints": [9578], "characters": "\u256A" },
+ "╡": { "codepoints": [9569], "characters": "\u2561" },
+ "╞": { "codepoints": [9566], "characters": "\u255E" },
+ "┼": { "codepoints": [9532], "characters": "\u253C" },
+ "┤": { "codepoints": [9508], "characters": "\u2524" },
+ "├": { "codepoints": [9500], "characters": "\u251C" },
+ "‵": { "codepoints": [8245], "characters": "\u2035" },
+ "˘": { "codepoints": [728], "characters": "\u02D8" },
+ "¦": { "codepoints": [166], "characters": "\u00A6" },
+ "¦": { "codepoints": [166], "characters": "\u00A6" },
+ "𝒷": { "codepoints": [119991], "characters": "\uD835\uDCB7" },
+ "⁏": { "codepoints": [8271], "characters": "\u204F" },
+ "∽": { "codepoints": [8765], "characters": "\u223D" },
+ "⋍": { "codepoints": [8909], "characters": "\u22CD" },
+ "\": { "codepoints": [92], "characters": "\u005C" },
+ "⧅": { "codepoints": [10693], "characters": "\u29C5" },
+ "⟈": { "codepoints": [10184], "characters": "\u27C8" },
+ "•": { "codepoints": [8226], "characters": "\u2022" },
+ "•": { "codepoints": [8226], "characters": "\u2022" },
+ "≎": { "codepoints": [8782], "characters": "\u224E" },
+ "⪮": { "codepoints": [10926], "characters": "\u2AAE" },
+ "≏": { "codepoints": [8783], "characters": "\u224F" },
+ "≏": { "codepoints": [8783], "characters": "\u224F" },
+ "ć": { "codepoints": [263], "characters": "\u0107" },
+ "∩": { "codepoints": [8745], "characters": "\u2229" },
+ "⩄": { "codepoints": [10820], "characters": "\u2A44" },
+ "⩉": { "codepoints": [10825], "characters": "\u2A49" },
+ "⩋": { "codepoints": [10827], "characters": "\u2A4B" },
+ "⩇": { "codepoints": [10823], "characters": "\u2A47" },
+ "⩀": { "codepoints": [10816], "characters": "\u2A40" },
+ "∩︀": { "codepoints": [8745, 65024], "characters": "\u2229\uFE00" },
+ "⁁": { "codepoints": [8257], "characters": "\u2041" },
+ "ˇ": { "codepoints": [711], "characters": "\u02C7" },
+ "⩍": { "codepoints": [10829], "characters": "\u2A4D" },
+ "č": { "codepoints": [269], "characters": "\u010D" },
+ "ç": { "codepoints": [231], "characters": "\u00E7" },
+ "ç": { "codepoints": [231], "characters": "\u00E7" },
+ "ĉ": { "codepoints": [265], "characters": "\u0109" },
+ "⩌": { "codepoints": [10828], "characters": "\u2A4C" },
+ "⩐": { "codepoints": [10832], "characters": "\u2A50" },
+ "ċ": { "codepoints": [267], "characters": "\u010B" },
+ "¸": { "codepoints": [184], "characters": "\u00B8" },
+ "¸": { "codepoints": [184], "characters": "\u00B8" },
+ "⦲": { "codepoints": [10674], "characters": "\u29B2" },
+ "¢": { "codepoints": [162], "characters": "\u00A2" },
+ "¢": { "codepoints": [162], "characters": "\u00A2" },
+ "·": { "codepoints": [183], "characters": "\u00B7" },
+ "𝔠": { "codepoints": [120096], "characters": "\uD835\uDD20" },
+ "ч": { "codepoints": [1095], "characters": "\u0447" },
+ "✓": { "codepoints": [10003], "characters": "\u2713" },
+ "✓": { "codepoints": [10003], "characters": "\u2713" },
+ "χ": { "codepoints": [967], "characters": "\u03C7" },
+ "○": { "codepoints": [9675], "characters": "\u25CB" },
+ "⧃": { "codepoints": [10691], "characters": "\u29C3" },
+ "ˆ": { "codepoints": [710], "characters": "\u02C6" },
+ "≗": { "codepoints": [8791], "characters": "\u2257" },
+ "↺": { "codepoints": [8634], "characters": "\u21BA" },
+ "↻": { "codepoints": [8635], "characters": "\u21BB" },
+ "®": { "codepoints": [174], "characters": "\u00AE" },
+ "Ⓢ": { "codepoints": [9416], "characters": "\u24C8" },
+ "⊛": { "codepoints": [8859], "characters": "\u229B" },
+ "⊚": { "codepoints": [8858], "characters": "\u229A" },
+ "⊝": { "codepoints": [8861], "characters": "\u229D" },
+ "≗": { "codepoints": [8791], "characters": "\u2257" },
+ "⨐": { "codepoints": [10768], "characters": "\u2A10" },
+ "⫯": { "codepoints": [10991], "characters": "\u2AEF" },
+ "⧂": { "codepoints": [10690], "characters": "\u29C2" },
+ "♣": { "codepoints": [9827], "characters": "\u2663" },
+ "♣": { "codepoints": [9827], "characters": "\u2663" },
+ ":": { "codepoints": [58], "characters": "\u003A" },
+ "≔": { "codepoints": [8788], "characters": "\u2254" },
+ "≔": { "codepoints": [8788], "characters": "\u2254" },
+ ",": { "codepoints": [44], "characters": "\u002C" },
+ "@": { "codepoints": [64], "characters": "\u0040" },
+ "∁": { "codepoints": [8705], "characters": "\u2201" },
+ "∘": { "codepoints": [8728], "characters": "\u2218" },
+ "∁": { "codepoints": [8705], "characters": "\u2201" },
+ "ℂ": { "codepoints": [8450], "characters": "\u2102" },
+ "≅": { "codepoints": [8773], "characters": "\u2245" },
+ "⩭": { "codepoints": [10861], "characters": "\u2A6D" },
+ "∮": { "codepoints": [8750], "characters": "\u222E" },
+ "𝕔": { "codepoints": [120148], "characters": "\uD835\uDD54" },
+ "∐": { "codepoints": [8720], "characters": "\u2210" },
+ "©": { "codepoints": [169], "characters": "\u00A9" },
+ "©": { "codepoints": [169], "characters": "\u00A9" },
+ "℗": { "codepoints": [8471], "characters": "\u2117" },
+ "↵": { "codepoints": [8629], "characters": "\u21B5" },
+ "✗": { "codepoints": [10007], "characters": "\u2717" },
+ "𝒸": { "codepoints": [119992], "characters": "\uD835\uDCB8" },
+ "⫏": { "codepoints": [10959], "characters": "\u2ACF" },
+ "⫑": { "codepoints": [10961], "characters": "\u2AD1" },
+ "⫐": { "codepoints": [10960], "characters": "\u2AD0" },
+ "⫒": { "codepoints": [10962], "characters": "\u2AD2" },
+ "⋯": { "codepoints": [8943], "characters": "\u22EF" },
+ "⤸": { "codepoints": [10552], "characters": "\u2938" },
+ "⤵": { "codepoints": [10549], "characters": "\u2935" },
+ "⋞": { "codepoints": [8926], "characters": "\u22DE" },
+ "⋟": { "codepoints": [8927], "characters": "\u22DF" },
+ "↶": { "codepoints": [8630], "characters": "\u21B6" },
+ "⤽": { "codepoints": [10557], "characters": "\u293D" },
+ "∪": { "codepoints": [8746], "characters": "\u222A" },
+ "⩈": { "codepoints": [10824], "characters": "\u2A48" },
+ "⩆": { "codepoints": [10822], "characters": "\u2A46" },
+ "⩊": { "codepoints": [10826], "characters": "\u2A4A" },
+ "⊍": { "codepoints": [8845], "characters": "\u228D" },
+ "⩅": { "codepoints": [10821], "characters": "\u2A45" },
+ "∪︀": { "codepoints": [8746, 65024], "characters": "\u222A\uFE00" },
+ "↷": { "codepoints": [8631], "characters": "\u21B7" },
+ "⤼": { "codepoints": [10556], "characters": "\u293C" },
+ "⋞": { "codepoints": [8926], "characters": "\u22DE" },
+ "⋟": { "codepoints": [8927], "characters": "\u22DF" },
+ "⋎": { "codepoints": [8910], "characters": "\u22CE" },
+ "⋏": { "codepoints": [8911], "characters": "\u22CF" },
+ "¤": { "codepoints": [164], "characters": "\u00A4" },
+ "¤": { "codepoints": [164], "characters": "\u00A4" },
+ "↶": { "codepoints": [8630], "characters": "\u21B6" },
+ "↷": { "codepoints": [8631], "characters": "\u21B7" },
+ "⋎": { "codepoints": [8910], "characters": "\u22CE" },
+ "⋏": { "codepoints": [8911], "characters": "\u22CF" },
+ "∲": { "codepoints": [8754], "characters": "\u2232" },
+ "∱": { "codepoints": [8753], "characters": "\u2231" },
+ "⌭": { "codepoints": [9005], "characters": "\u232D" },
+ "⇓": { "codepoints": [8659], "characters": "\u21D3" },
+ "⥥": { "codepoints": [10597], "characters": "\u2965" },
+ "†": { "codepoints": [8224], "characters": "\u2020" },
+ "ℸ": { "codepoints": [8504], "characters": "\u2138" },
+ "↓": { "codepoints": [8595], "characters": "\u2193" },
+ "‐": { "codepoints": [8208], "characters": "\u2010" },
+ "⊣": { "codepoints": [8867], "characters": "\u22A3" },
+ "⤏": { "codepoints": [10511], "characters": "\u290F" },
+ "˝": { "codepoints": [733], "characters": "\u02DD" },
+ "ď": { "codepoints": [271], "characters": "\u010F" },
+ "д": { "codepoints": [1076], "characters": "\u0434" },
+ "ⅆ": { "codepoints": [8518], "characters": "\u2146" },
+ "‡": { "codepoints": [8225], "characters": "\u2021" },
+ "⇊": { "codepoints": [8650], "characters": "\u21CA" },
+ "⩷": { "codepoints": [10871], "characters": "\u2A77" },
+ "°": { "codepoints": [176], "characters": "\u00B0" },
+ "°": { "codepoints": [176], "characters": "\u00B0" },
+ "δ": { "codepoints": [948], "characters": "\u03B4" },
+ "⦱": { "codepoints": [10673], "characters": "\u29B1" },
+ "⥿": { "codepoints": [10623], "characters": "\u297F" },
+ "𝔡": { "codepoints": [120097], "characters": "\uD835\uDD21" },
+ "⇃": { "codepoints": [8643], "characters": "\u21C3" },
+ "⇂": { "codepoints": [8642], "characters": "\u21C2" },
+ "⋄": { "codepoints": [8900], "characters": "\u22C4" },
+ "⋄": { "codepoints": [8900], "characters": "\u22C4" },
+ "♦": { "codepoints": [9830], "characters": "\u2666" },
+ "♦": { "codepoints": [9830], "characters": "\u2666" },
+ "¨": { "codepoints": [168], "characters": "\u00A8" },
+ "ϝ": { "codepoints": [989], "characters": "\u03DD" },
+ "⋲": { "codepoints": [8946], "characters": "\u22F2" },
+ "÷": { "codepoints": [247], "characters": "\u00F7" },
+ "÷": { "codepoints": [247], "characters": "\u00F7" },
+ "÷": { "codepoints": [247], "characters": "\u00F7" },
+ "⋇": { "codepoints": [8903], "characters": "\u22C7" },
+ "⋇": { "codepoints": [8903], "characters": "\u22C7" },
+ "ђ": { "codepoints": [1106], "characters": "\u0452" },
+ "⌞": { "codepoints": [8990], "characters": "\u231E" },
+ "⌍": { "codepoints": [8973], "characters": "\u230D" },
+ "$": { "codepoints": [36], "characters": "\u0024" },
+ "𝕕": { "codepoints": [120149], "characters": "\uD835\uDD55" },
+ "˙": { "codepoints": [729], "characters": "\u02D9" },
+ "≐": { "codepoints": [8784], "characters": "\u2250" },
+ "≑": { "codepoints": [8785], "characters": "\u2251" },
+ "∸": { "codepoints": [8760], "characters": "\u2238" },
+ "∔": { "codepoints": [8724], "characters": "\u2214" },
+ "⊡": { "codepoints": [8865], "characters": "\u22A1" },
+ "⌆": { "codepoints": [8966], "characters": "\u2306" },
+ "↓": { "codepoints": [8595], "characters": "\u2193" },
+ "⇊": { "codepoints": [8650], "characters": "\u21CA" },
+ "⇃": { "codepoints": [8643], "characters": "\u21C3" },
+ "⇂": { "codepoints": [8642], "characters": "\u21C2" },
+ "⤐": { "codepoints": [10512], "characters": "\u2910" },
+ "⌟": { "codepoints": [8991], "characters": "\u231F" },
+ "⌌": { "codepoints": [8972], "characters": "\u230C" },
+ "𝒹": { "codepoints": [119993], "characters": "\uD835\uDCB9" },
+ "ѕ": { "codepoints": [1109], "characters": "\u0455" },
+ "⧶": { "codepoints": [10742], "characters": "\u29F6" },
+ "đ": { "codepoints": [273], "characters": "\u0111" },
+ "⋱": { "codepoints": [8945], "characters": "\u22F1" },
+ "▿": { "codepoints": [9663], "characters": "\u25BF" },
+ "▾": { "codepoints": [9662], "characters": "\u25BE" },
+ "⇵": { "codepoints": [8693], "characters": "\u21F5" },
+ "⥯": { "codepoints": [10607], "characters": "\u296F" },
+ "⦦": { "codepoints": [10662], "characters": "\u29A6" },
+ "џ": { "codepoints": [1119], "characters": "\u045F" },
+ "⟿": { "codepoints": [10239], "characters": "\u27FF" },
+ "⩷": { "codepoints": [10871], "characters": "\u2A77" },
+ "≑": { "codepoints": [8785], "characters": "\u2251" },
+ "é": { "codepoints": [233], "characters": "\u00E9" },
+ "é": { "codepoints": [233], "characters": "\u00E9" },
+ "⩮": { "codepoints": [10862], "characters": "\u2A6E" },
+ "ě": { "codepoints": [283], "characters": "\u011B" },
+ "≖": { "codepoints": [8790], "characters": "\u2256" },
+ "ê": { "codepoints": [234], "characters": "\u00EA" },
+ "ê": { "codepoints": [234], "characters": "\u00EA" },
+ "≕": { "codepoints": [8789], "characters": "\u2255" },
+ "э": { "codepoints": [1101], "characters": "\u044D" },
+ "ė": { "codepoints": [279], "characters": "\u0117" },
+ "ⅇ": { "codepoints": [8519], "characters": "\u2147" },
+ "≒": { "codepoints": [8786], "characters": "\u2252" },
+ "𝔢": { "codepoints": [120098], "characters": "\uD835\uDD22" },
+ "⪚": { "codepoints": [10906], "characters": "\u2A9A" },
+ "è": { "codepoints": [232], "characters": "\u00E8" },
+ "è": { "codepoints": [232], "characters": "\u00E8" },
+ "⪖": { "codepoints": [10902], "characters": "\u2A96" },
+ "⪘": { "codepoints": [10904], "characters": "\u2A98" },
+ "⪙": { "codepoints": [10905], "characters": "\u2A99" },
+ "⏧": { "codepoints": [9191], "characters": "\u23E7" },
+ "ℓ": { "codepoints": [8467], "characters": "\u2113" },
+ "⪕": { "codepoints": [10901], "characters": "\u2A95" },
+ "⪗": { "codepoints": [10903], "characters": "\u2A97" },
+ "ē": { "codepoints": [275], "characters": "\u0113" },
+ "∅": { "codepoints": [8709], "characters": "\u2205" },
+ "∅": { "codepoints": [8709], "characters": "\u2205" },
+ "∅": { "codepoints": [8709], "characters": "\u2205" },
+ " ": { "codepoints": [8196], "characters": "\u2004" },
+ " ": { "codepoints": [8197], "characters": "\u2005" },
+ " ": { "codepoints": [8195], "characters": "\u2003" },
+ "ŋ": { "codepoints": [331], "characters": "\u014B" },
+ " ": { "codepoints": [8194], "characters": "\u2002" },
+ "ę": { "codepoints": [281], "characters": "\u0119" },
+ "𝕖": { "codepoints": [120150], "characters": "\uD835\uDD56" },
+ "⋕": { "codepoints": [8917], "characters": "\u22D5" },
+ "⧣": { "codepoints": [10723], "characters": "\u29E3" },
+ "⩱": { "codepoints": [10865], "characters": "\u2A71" },
+ "ε": { "codepoints": [949], "characters": "\u03B5" },
+ "ε": { "codepoints": [949], "characters": "\u03B5" },
+ "ϵ": { "codepoints": [1013], "characters": "\u03F5" },
+ "≖": { "codepoints": [8790], "characters": "\u2256" },
+ "≕": { "codepoints": [8789], "characters": "\u2255" },
+ "≂": { "codepoints": [8770], "characters": "\u2242" },
+ "⪖": { "codepoints": [10902], "characters": "\u2A96" },
+ "⪕": { "codepoints": [10901], "characters": "\u2A95" },
+ "=": { "codepoints": [61], "characters": "\u003D" },
+ "≟": { "codepoints": [8799], "characters": "\u225F" },
+ "≡": { "codepoints": [8801], "characters": "\u2261" },
+ "⩸": { "codepoints": [10872], "characters": "\u2A78" },
+ "⧥": { "codepoints": [10725], "characters": "\u29E5" },
+ "≓": { "codepoints": [8787], "characters": "\u2253" },
+ "⥱": { "codepoints": [10609], "characters": "\u2971" },
+ "ℯ": { "codepoints": [8495], "characters": "\u212F" },
+ "≐": { "codepoints": [8784], "characters": "\u2250" },
+ "≂": { "codepoints": [8770], "characters": "\u2242" },
+ "η": { "codepoints": [951], "characters": "\u03B7" },
+ "ð": { "codepoints": [240], "characters": "\u00F0" },
+ "ð": { "codepoints": [240], "characters": "\u00F0" },
+ "ë": { "codepoints": [235], "characters": "\u00EB" },
+ "ë": { "codepoints": [235], "characters": "\u00EB" },
+ "€": { "codepoints": [8364], "characters": "\u20AC" },
+ "!": { "codepoints": [33], "characters": "\u0021" },
+ "∃": { "codepoints": [8707], "characters": "\u2203" },
+ "ℰ": { "codepoints": [8496], "characters": "\u2130" },
+ "ⅇ": { "codepoints": [8519], "characters": "\u2147" },
+ "≒": { "codepoints": [8786], "characters": "\u2252" },
+ "ф": { "codepoints": [1092], "characters": "\u0444" },
+ "♀": { "codepoints": [9792], "characters": "\u2640" },
+ "ffi": { "codepoints": [64259], "characters": "\uFB03" },
+ "ff": { "codepoints": [64256], "characters": "\uFB00" },
+ "ffl": { "codepoints": [64260], "characters": "\uFB04" },
+ "𝔣": { "codepoints": [120099], "characters": "\uD835\uDD23" },
+ "fi": { "codepoints": [64257], "characters": "\uFB01" },
+ "fj": { "codepoints": [102, 106], "characters": "\u0066\u006A" },
+ "♭": { "codepoints": [9837], "characters": "\u266D" },
+ "fl": { "codepoints": [64258], "characters": "\uFB02" },
+ "▱": { "codepoints": [9649], "characters": "\u25B1" },
+ "ƒ": { "codepoints": [402], "characters": "\u0192" },
+ "𝕗": { "codepoints": [120151], "characters": "\uD835\uDD57" },
+ "∀": { "codepoints": [8704], "characters": "\u2200" },
+ "⋔": { "codepoints": [8916], "characters": "\u22D4" },
+ "⫙": { "codepoints": [10969], "characters": "\u2AD9" },
+ "⨍": { "codepoints": [10765], "characters": "\u2A0D" },
+ "½": { "codepoints": [189], "characters": "\u00BD" },
+ "½": { "codepoints": [189], "characters": "\u00BD" },
+ "⅓": { "codepoints": [8531], "characters": "\u2153" },
+ "¼": { "codepoints": [188], "characters": "\u00BC" },
+ "¼": { "codepoints": [188], "characters": "\u00BC" },
+ "⅕": { "codepoints": [8533], "characters": "\u2155" },
+ "⅙": { "codepoints": [8537], "characters": "\u2159" },
+ "⅛": { "codepoints": [8539], "characters": "\u215B" },
+ "⅔": { "codepoints": [8532], "characters": "\u2154" },
+ "⅖": { "codepoints": [8534], "characters": "\u2156" },
+ "¾": { "codepoints": [190], "characters": "\u00BE" },
+ "¾": { "codepoints": [190], "characters": "\u00BE" },
+ "⅗": { "codepoints": [8535], "characters": "\u2157" },
+ "⅜": { "codepoints": [8540], "characters": "\u215C" },
+ "⅘": { "codepoints": [8536], "characters": "\u2158" },
+ "⅚": { "codepoints": [8538], "characters": "\u215A" },
+ "⅝": { "codepoints": [8541], "characters": "\u215D" },
+ "⅞": { "codepoints": [8542], "characters": "\u215E" },
+ "⁄": { "codepoints": [8260], "characters": "\u2044" },
+ "⌢": { "codepoints": [8994], "characters": "\u2322" },
+ "𝒻": { "codepoints": [119995], "characters": "\uD835\uDCBB" },
+ "≧": { "codepoints": [8807], "characters": "\u2267" },
+ "⪌": { "codepoints": [10892], "characters": "\u2A8C" },
+ "ǵ": { "codepoints": [501], "characters": "\u01F5" },
+ "γ": { "codepoints": [947], "characters": "\u03B3" },
+ "ϝ": { "codepoints": [989], "characters": "\u03DD" },
+ "⪆": { "codepoints": [10886], "characters": "\u2A86" },
+ "ğ": { "codepoints": [287], "characters": "\u011F" },
+ "ĝ": { "codepoints": [285], "characters": "\u011D" },
+ "г": { "codepoints": [1075], "characters": "\u0433" },
+ "ġ": { "codepoints": [289], "characters": "\u0121" },
+ "≥": { "codepoints": [8805], "characters": "\u2265" },
+ "⋛": { "codepoints": [8923], "characters": "\u22DB" },
+ "≥": { "codepoints": [8805], "characters": "\u2265" },
+ "≧": { "codepoints": [8807], "characters": "\u2267" },
+ "⩾": { "codepoints": [10878], "characters": "\u2A7E" },
+ "⩾": { "codepoints": [10878], "characters": "\u2A7E" },
+ "⪩": { "codepoints": [10921], "characters": "\u2AA9" },
+ "⪀": { "codepoints": [10880], "characters": "\u2A80" },
+ "⪂": { "codepoints": [10882], "characters": "\u2A82" },
+ "⪄": { "codepoints": [10884], "characters": "\u2A84" },
+ "⋛︀": { "codepoints": [8923, 65024], "characters": "\u22DB\uFE00" },
+ "⪔": { "codepoints": [10900], "characters": "\u2A94" },
+ "𝔤": { "codepoints": [120100], "characters": "\uD835\uDD24" },
+ "≫": { "codepoints": [8811], "characters": "\u226B" },
+ "⋙": { "codepoints": [8921], "characters": "\u22D9" },
+ "ℷ": { "codepoints": [8503], "characters": "\u2137" },
+ "ѓ": { "codepoints": [1107], "characters": "\u0453" },
+ "≷": { "codepoints": [8823], "characters": "\u2277" },
+ "⪒": { "codepoints": [10898], "characters": "\u2A92" },
+ "⪥": { "codepoints": [10917], "characters": "\u2AA5" },
+ "⪤": { "codepoints": [10916], "characters": "\u2AA4" },
+ "≩": { "codepoints": [8809], "characters": "\u2269" },
+ "⪊": { "codepoints": [10890], "characters": "\u2A8A" },
+ "⪊": { "codepoints": [10890], "characters": "\u2A8A" },
+ "⪈": { "codepoints": [10888], "characters": "\u2A88" },
+ "⪈": { "codepoints": [10888], "characters": "\u2A88" },
+ "≩": { "codepoints": [8809], "characters": "\u2269" },
+ "⋧": { "codepoints": [8935], "characters": "\u22E7" },
+ "𝕘": { "codepoints": [120152], "characters": "\uD835\uDD58" },
+ "`": { "codepoints": [96], "characters": "\u0060" },
+ "ℊ": { "codepoints": [8458], "characters": "\u210A" },
+ "≳": { "codepoints": [8819], "characters": "\u2273" },
+ "⪎": { "codepoints": [10894], "characters": "\u2A8E" },
+ "⪐": { "codepoints": [10896], "characters": "\u2A90" },
+ ">": { "codepoints": [62], "characters": "\u003E" },
+ ">": { "codepoints": [62], "characters": "\u003E" },
+ "⪧": { "codepoints": [10919], "characters": "\u2AA7" },
+ "⩺": { "codepoints": [10874], "characters": "\u2A7A" },
+ "⋗": { "codepoints": [8919], "characters": "\u22D7" },
+ "⦕": { "codepoints": [10645], "characters": "\u2995" },
+ "⩼": { "codepoints": [10876], "characters": "\u2A7C" },
+ "⪆": { "codepoints": [10886], "characters": "\u2A86" },
+ "⥸": { "codepoints": [10616], "characters": "\u2978" },
+ "⋗": { "codepoints": [8919], "characters": "\u22D7" },
+ "⋛": { "codepoints": [8923], "characters": "\u22DB" },
+ "⪌": { "codepoints": [10892], "characters": "\u2A8C" },
+ "≷": { "codepoints": [8823], "characters": "\u2277" },
+ "≳": { "codepoints": [8819], "characters": "\u2273" },
+ "≩︀": { "codepoints": [8809, 65024], "characters": "\u2269\uFE00" },
+ "≩︀": { "codepoints": [8809, 65024], "characters": "\u2269\uFE00" },
+ "⇔": { "codepoints": [8660], "characters": "\u21D4" },
+ " ": { "codepoints": [8202], "characters": "\u200A" },
+ "½": { "codepoints": [189], "characters": "\u00BD" },
+ "ℋ": { "codepoints": [8459], "characters": "\u210B" },
+ "ъ": { "codepoints": [1098], "characters": "\u044A" },
+ "↔": { "codepoints": [8596], "characters": "\u2194" },
+ "⥈": { "codepoints": [10568], "characters": "\u2948" },
+ "↭": { "codepoints": [8621], "characters": "\u21AD" },
+ "ℏ": { "codepoints": [8463], "characters": "\u210F" },
+ "ĥ": { "codepoints": [293], "characters": "\u0125" },
+ "♥": { "codepoints": [9829], "characters": "\u2665" },
+ "♥": { "codepoints": [9829], "characters": "\u2665" },
+ "…": { "codepoints": [8230], "characters": "\u2026" },
+ "⊹": { "codepoints": [8889], "characters": "\u22B9" },
+ "𝔥": { "codepoints": [120101], "characters": "\uD835\uDD25" },
+ "⤥": { "codepoints": [10533], "characters": "\u2925" },
+ "⤦": { "codepoints": [10534], "characters": "\u2926" },
+ "⇿": { "codepoints": [8703], "characters": "\u21FF" },
+ "∻": { "codepoints": [8763], "characters": "\u223B" },
+ "↩": { "codepoints": [8617], "characters": "\u21A9" },
+ "↪": { "codepoints": [8618], "characters": "\u21AA" },
+ "𝕙": { "codepoints": [120153], "characters": "\uD835\uDD59" },
+ "―": { "codepoints": [8213], "characters": "\u2015" },
+ "𝒽": { "codepoints": [119997], "characters": "\uD835\uDCBD" },
+ "ℏ": { "codepoints": [8463], "characters": "\u210F" },
+ "ħ": { "codepoints": [295], "characters": "\u0127" },
+ "⁃": { "codepoints": [8259], "characters": "\u2043" },
+ "‐": { "codepoints": [8208], "characters": "\u2010" },
+ "í": { "codepoints": [237], "characters": "\u00ED" },
+ "í": { "codepoints": [237], "characters": "\u00ED" },
+ "⁣": { "codepoints": [8291], "characters": "\u2063" },
+ "î": { "codepoints": [238], "characters": "\u00EE" },
+ "î": { "codepoints": [238], "characters": "\u00EE" },
+ "и": { "codepoints": [1080], "characters": "\u0438" },
+ "е": { "codepoints": [1077], "characters": "\u0435" },
+ "¡": { "codepoints": [161], "characters": "\u00A1" },
+ "¡": { "codepoints": [161], "characters": "\u00A1" },
+ "⇔": { "codepoints": [8660], "characters": "\u21D4" },
+ "𝔦": { "codepoints": [120102], "characters": "\uD835\uDD26" },
+ "ì": { "codepoints": [236], "characters": "\u00EC" },
+ "ì": { "codepoints": [236], "characters": "\u00EC" },
+ "ⅈ": { "codepoints": [8520], "characters": "\u2148" },
+ "⨌": { "codepoints": [10764], "characters": "\u2A0C" },
+ "∭": { "codepoints": [8749], "characters": "\u222D" },
+ "⧜": { "codepoints": [10716], "characters": "\u29DC" },
+ "℩": { "codepoints": [8489], "characters": "\u2129" },
+ "ij": { "codepoints": [307], "characters": "\u0133" },
+ "ī": { "codepoints": [299], "characters": "\u012B" },
+ "ℑ": { "codepoints": [8465], "characters": "\u2111" },
+ "ℐ": { "codepoints": [8464], "characters": "\u2110" },
+ "ℑ": { "codepoints": [8465], "characters": "\u2111" },
+ "ı": { "codepoints": [305], "characters": "\u0131" },
+ "⊷": { "codepoints": [8887], "characters": "\u22B7" },
+ "Ƶ": { "codepoints": [437], "characters": "\u01B5" },
+ "∈": { "codepoints": [8712], "characters": "\u2208" },
+ "℅": { "codepoints": [8453], "characters": "\u2105" },
+ "∞": { "codepoints": [8734], "characters": "\u221E" },
+ "⧝": { "codepoints": [10717], "characters": "\u29DD" },
+ "ı": { "codepoints": [305], "characters": "\u0131" },
+ "∫": { "codepoints": [8747], "characters": "\u222B" },
+ "⊺": { "codepoints": [8890], "characters": "\u22BA" },
+ "ℤ": { "codepoints": [8484], "characters": "\u2124" },
+ "⊺": { "codepoints": [8890], "characters": "\u22BA" },
+ "⨗": { "codepoints": [10775], "characters": "\u2A17" },
+ "⨼": { "codepoints": [10812], "characters": "\u2A3C" },
+ "ё": { "codepoints": [1105], "characters": "\u0451" },
+ "į": { "codepoints": [303], "characters": "\u012F" },
+ "𝕚": { "codepoints": [120154], "characters": "\uD835\uDD5A" },
+ "ι": { "codepoints": [953], "characters": "\u03B9" },
+ "⨼": { "codepoints": [10812], "characters": "\u2A3C" },
+ "¿": { "codepoints": [191], "characters": "\u00BF" },
+ "¿": { "codepoints": [191], "characters": "\u00BF" },
+ "𝒾": { "codepoints": [119998], "characters": "\uD835\uDCBE" },
+ "∈": { "codepoints": [8712], "characters": "\u2208" },
+ "⋹": { "codepoints": [8953], "characters": "\u22F9" },
+ "⋵": { "codepoints": [8949], "characters": "\u22F5" },
+ "⋴": { "codepoints": [8948], "characters": "\u22F4" },
+ "⋳": { "codepoints": [8947], "characters": "\u22F3" },
+ "∈": { "codepoints": [8712], "characters": "\u2208" },
+ "⁢": { "codepoints": [8290], "characters": "\u2062" },
+ "ĩ": { "codepoints": [297], "characters": "\u0129" },
+ "і": { "codepoints": [1110], "characters": "\u0456" },
+ "ï": { "codepoints": [239], "characters": "\u00EF" },
+ "ï": { "codepoints": [239], "characters": "\u00EF" },
+ "ĵ": { "codepoints": [309], "characters": "\u0135" },
+ "й": { "codepoints": [1081], "characters": "\u0439" },
+ "𝔧": { "codepoints": [120103], "characters": "\uD835\uDD27" },
+ "ȷ": { "codepoints": [567], "characters": "\u0237" },
+ "𝕛": { "codepoints": [120155], "characters": "\uD835\uDD5B" },
+ "𝒿": { "codepoints": [119999], "characters": "\uD835\uDCBF" },
+ "ј": { "codepoints": [1112], "characters": "\u0458" },
+ "є": { "codepoints": [1108], "characters": "\u0454" },
+ "κ": { "codepoints": [954], "characters": "\u03BA" },
+ "ϰ": { "codepoints": [1008], "characters": "\u03F0" },
+ "ķ": { "codepoints": [311], "characters": "\u0137" },
+ "к": { "codepoints": [1082], "characters": "\u043A" },
+ "𝔨": { "codepoints": [120104], "characters": "\uD835\uDD28" },
+ "ĸ": { "codepoints": [312], "characters": "\u0138" },
+ "х": { "codepoints": [1093], "characters": "\u0445" },
+ "ќ": { "codepoints": [1116], "characters": "\u045C" },
+ "𝕜": { "codepoints": [120156], "characters": "\uD835\uDD5C" },
+ "𝓀": { "codepoints": [120000], "characters": "\uD835\uDCC0" },
+ "⇚": { "codepoints": [8666], "characters": "\u21DA" },
+ "⇐": { "codepoints": [8656], "characters": "\u21D0" },
+ "⤛": { "codepoints": [10523], "characters": "\u291B" },
+ "⤎": { "codepoints": [10510], "characters": "\u290E" },
+ "≦": { "codepoints": [8806], "characters": "\u2266" },
+ "⪋": { "codepoints": [10891], "characters": "\u2A8B" },
+ "⥢": { "codepoints": [10594], "characters": "\u2962" },
+ "ĺ": { "codepoints": [314], "characters": "\u013A" },
+ "⦴": { "codepoints": [10676], "characters": "\u29B4" },
+ "ℒ": { "codepoints": [8466], "characters": "\u2112" },
+ "λ": { "codepoints": [955], "characters": "\u03BB" },
+ "⟨": { "codepoints": [10216], "characters": "\u27E8" },
+ "⦑": { "codepoints": [10641], "characters": "\u2991" },
+ "⟨": { "codepoints": [10216], "characters": "\u27E8" },
+ "⪅": { "codepoints": [10885], "characters": "\u2A85" },
+ "«": { "codepoints": [171], "characters": "\u00AB" },
+ "«": { "codepoints": [171], "characters": "\u00AB" },
+ "←": { "codepoints": [8592], "characters": "\u2190" },
+ "⇤": { "codepoints": [8676], "characters": "\u21E4" },
+ "⤟": { "codepoints": [10527], "characters": "\u291F" },
+ "⤝": { "codepoints": [10525], "characters": "\u291D" },
+ "↩": { "codepoints": [8617], "characters": "\u21A9" },
+ "↫": { "codepoints": [8619], "characters": "\u21AB" },
+ "⤹": { "codepoints": [10553], "characters": "\u2939" },
+ "⥳": { "codepoints": [10611], "characters": "\u2973" },
+ "↢": { "codepoints": [8610], "characters": "\u21A2" },
+ "⪫": { "codepoints": [10923], "characters": "\u2AAB" },
+ "⤙": { "codepoints": [10521], "characters": "\u2919" },
+ "⪭": { "codepoints": [10925], "characters": "\u2AAD" },
+ "⪭︀": { "codepoints": [10925, 65024], "characters": "\u2AAD\uFE00" },
+ "⤌": { "codepoints": [10508], "characters": "\u290C" },
+ "❲": { "codepoints": [10098], "characters": "\u2772" },
+ "{": { "codepoints": [123], "characters": "\u007B" },
+ "[": { "codepoints": [91], "characters": "\u005B" },
+ "⦋": { "codepoints": [10635], "characters": "\u298B" },
+ "⦏": { "codepoints": [10639], "characters": "\u298F" },
+ "⦍": { "codepoints": [10637], "characters": "\u298D" },
+ "ľ": { "codepoints": [318], "characters": "\u013E" },
+ "ļ": { "codepoints": [316], "characters": "\u013C" },
+ "⌈": { "codepoints": [8968], "characters": "\u2308" },
+ "{": { "codepoints": [123], "characters": "\u007B" },
+ "л": { "codepoints": [1083], "characters": "\u043B" },
+ "⤶": { "codepoints": [10550], "characters": "\u2936" },
+ "“": { "codepoints": [8220], "characters": "\u201C" },
+ "„": { "codepoints": [8222], "characters": "\u201E" },
+ "⥧": { "codepoints": [10599], "characters": "\u2967" },
+ "⥋": { "codepoints": [10571], "characters": "\u294B" },
+ "↲": { "codepoints": [8626], "characters": "\u21B2" },
+ "≤": { "codepoints": [8804], "characters": "\u2264" },
+ "←": { "codepoints": [8592], "characters": "\u2190" },
+ "↢": { "codepoints": [8610], "characters": "\u21A2" },
+ "↽": { "codepoints": [8637], "characters": "\u21BD" },
+ "↼": { "codepoints": [8636], "characters": "\u21BC" },
+ "⇇": { "codepoints": [8647], "characters": "\u21C7" },
+ "↔": { "codepoints": [8596], "characters": "\u2194" },
+ "⇆": { "codepoints": [8646], "characters": "\u21C6" },
+ "⇋": { "codepoints": [8651], "characters": "\u21CB" },
+ "↭": { "codepoints": [8621], "characters": "\u21AD" },
+ "⋋": { "codepoints": [8907], "characters": "\u22CB" },
+ "⋚": { "codepoints": [8922], "characters": "\u22DA" },
+ "≤": { "codepoints": [8804], "characters": "\u2264" },
+ "≦": { "codepoints": [8806], "characters": "\u2266" },
+ "⩽": { "codepoints": [10877], "characters": "\u2A7D" },
+ "⩽": { "codepoints": [10877], "characters": "\u2A7D" },
+ "⪨": { "codepoints": [10920], "characters": "\u2AA8" },
+ "⩿": { "codepoints": [10879], "characters": "\u2A7F" },
+ "⪁": { "codepoints": [10881], "characters": "\u2A81" },
+ "⪃": { "codepoints": [10883], "characters": "\u2A83" },
+ "⋚︀": { "codepoints": [8922, 65024], "characters": "\u22DA\uFE00" },
+ "⪓": { "codepoints": [10899], "characters": "\u2A93" },
+ "⪅": { "codepoints": [10885], "characters": "\u2A85" },
+ "⋖": { "codepoints": [8918], "characters": "\u22D6" },
+ "⋚": { "codepoints": [8922], "characters": "\u22DA" },
+ "⪋": { "codepoints": [10891], "characters": "\u2A8B" },
+ "≶": { "codepoints": [8822], "characters": "\u2276" },
+ "≲": { "codepoints": [8818], "characters": "\u2272" },
+ "⥼": { "codepoints": [10620], "characters": "\u297C" },
+ "⌊": { "codepoints": [8970], "characters": "\u230A" },
+ "𝔩": { "codepoints": [120105], "characters": "\uD835\uDD29" },
+ "≶": { "codepoints": [8822], "characters": "\u2276" },
+ "⪑": { "codepoints": [10897], "characters": "\u2A91" },
+ "↽": { "codepoints": [8637], "characters": "\u21BD" },
+ "↼": { "codepoints": [8636], "characters": "\u21BC" },
+ "⥪": { "codepoints": [10602], "characters": "\u296A" },
+ "▄": { "codepoints": [9604], "characters": "\u2584" },
+ "љ": { "codepoints": [1113], "characters": "\u0459" },
+ "≪": { "codepoints": [8810], "characters": "\u226A" },
+ "⇇": { "codepoints": [8647], "characters": "\u21C7" },
+ "⌞": { "codepoints": [8990], "characters": "\u231E" },
+ "⥫": { "codepoints": [10603], "characters": "\u296B" },
+ "◺": { "codepoints": [9722], "characters": "\u25FA" },
+ "ŀ": { "codepoints": [320], "characters": "\u0140" },
+ "⎰": { "codepoints": [9136], "characters": "\u23B0" },
+ "⎰": { "codepoints": [9136], "characters": "\u23B0" },
+ "≨": { "codepoints": [8808], "characters": "\u2268" },
+ "⪉": { "codepoints": [10889], "characters": "\u2A89" },
+ "⪉": { "codepoints": [10889], "characters": "\u2A89" },
+ "⪇": { "codepoints": [10887], "characters": "\u2A87" },
+ "⪇": { "codepoints": [10887], "characters": "\u2A87" },
+ "≨": { "codepoints": [8808], "characters": "\u2268" },
+ "⋦": { "codepoints": [8934], "characters": "\u22E6" },
+ "⟬": { "codepoints": [10220], "characters": "\u27EC" },
+ "⇽": { "codepoints": [8701], "characters": "\u21FD" },
+ "⟦": { "codepoints": [10214], "characters": "\u27E6" },
+ "⟵": { "codepoints": [10229], "characters": "\u27F5" },
+ "⟷": { "codepoints": [10231], "characters": "\u27F7" },
+ "⟼": { "codepoints": [10236], "characters": "\u27FC" },
+ "⟶": { "codepoints": [10230], "characters": "\u27F6" },
+ "↫": { "codepoints": [8619], "characters": "\u21AB" },
+ "↬": { "codepoints": [8620], "characters": "\u21AC" },
+ "⦅": { "codepoints": [10629], "characters": "\u2985" },
+ "𝕝": { "codepoints": [120157], "characters": "\uD835\uDD5D" },
+ "⨭": { "codepoints": [10797], "characters": "\u2A2D" },
+ "⨴": { "codepoints": [10804], "characters": "\u2A34" },
+ "∗": { "codepoints": [8727], "characters": "\u2217" },
+ "_": { "codepoints": [95], "characters": "\u005F" },
+ "◊": { "codepoints": [9674], "characters": "\u25CA" },
+ "◊": { "codepoints": [9674], "characters": "\u25CA" },
+ "⧫": { "codepoints": [10731], "characters": "\u29EB" },
+ "(": { "codepoints": [40], "characters": "\u0028" },
+ "⦓": { "codepoints": [10643], "characters": "\u2993" },
+ "⇆": { "codepoints": [8646], "characters": "\u21C6" },
+ "⌟": { "codepoints": [8991], "characters": "\u231F" },
+ "⇋": { "codepoints": [8651], "characters": "\u21CB" },
+ "⥭": { "codepoints": [10605], "characters": "\u296D" },
+ "‎": { "codepoints": [8206], "characters": "\u200E" },
+ "⊿": { "codepoints": [8895], "characters": "\u22BF" },
+ "‹": { "codepoints": [8249], "characters": "\u2039" },
+ "𝓁": { "codepoints": [120001], "characters": "\uD835\uDCC1" },
+ "↰": { "codepoints": [8624], "characters": "\u21B0" },
+ "≲": { "codepoints": [8818], "characters": "\u2272" },
+ "⪍": { "codepoints": [10893], "characters": "\u2A8D" },
+ "⪏": { "codepoints": [10895], "characters": "\u2A8F" },
+ "[": { "codepoints": [91], "characters": "\u005B" },
+ "‘": { "codepoints": [8216], "characters": "\u2018" },
+ "‚": { "codepoints": [8218], "characters": "\u201A" },
+ "ł": { "codepoints": [322], "characters": "\u0142" },
+ "<": { "codepoints": [60], "characters": "\u003C" },
+ "<": { "codepoints": [60], "characters": "\u003C" },
+ "⪦": { "codepoints": [10918], "characters": "\u2AA6" },
+ "⩹": { "codepoints": [10873], "characters": "\u2A79" },
+ "⋖": { "codepoints": [8918], "characters": "\u22D6" },
+ "⋋": { "codepoints": [8907], "characters": "\u22CB" },
+ "⋉": { "codepoints": [8905], "characters": "\u22C9" },
+ "⥶": { "codepoints": [10614], "characters": "\u2976" },
+ "⩻": { "codepoints": [10875], "characters": "\u2A7B" },
+ "⦖": { "codepoints": [10646], "characters": "\u2996" },
+ "◃": { "codepoints": [9667], "characters": "\u25C3" },
+ "⊴": { "codepoints": [8884], "characters": "\u22B4" },
+ "◂": { "codepoints": [9666], "characters": "\u25C2" },
+ "⥊": { "codepoints": [10570], "characters": "\u294A" },
+ "⥦": { "codepoints": [10598], "characters": "\u2966" },
+ "≨︀": { "codepoints": [8808, 65024], "characters": "\u2268\uFE00" },
+ "≨︀": { "codepoints": [8808, 65024], "characters": "\u2268\uFE00" },
+ "∺": { "codepoints": [8762], "characters": "\u223A" },
+ "¯": { "codepoints": [175], "characters": "\u00AF" },
+ "¯": { "codepoints": [175], "characters": "\u00AF" },
+ "♂": { "codepoints": [9794], "characters": "\u2642" },
+ "✠": { "codepoints": [10016], "characters": "\u2720" },
+ "✠": { "codepoints": [10016], "characters": "\u2720" },
+ "↦": { "codepoints": [8614], "characters": "\u21A6" },
+ "↦": { "codepoints": [8614], "characters": "\u21A6" },
+ "↧": { "codepoints": [8615], "characters": "\u21A7" },
+ "↤": { "codepoints": [8612], "characters": "\u21A4" },
+ "↥": { "codepoints": [8613], "characters": "\u21A5" },
+ "▮": { "codepoints": [9646], "characters": "\u25AE" },
+ "⨩": { "codepoints": [10793], "characters": "\u2A29" },
+ "м": { "codepoints": [1084], "characters": "\u043C" },
+ "—": { "codepoints": [8212], "characters": "\u2014" },
+ "∡": { "codepoints": [8737], "characters": "\u2221" },
+ "𝔪": { "codepoints": [120106], "characters": "\uD835\uDD2A" },
+ "℧": { "codepoints": [8487], "characters": "\u2127" },
+ "µ": { "codepoints": [181], "characters": "\u00B5" },
+ "µ": { "codepoints": [181], "characters": "\u00B5" },
+ "∣": { "codepoints": [8739], "characters": "\u2223" },
+ "*": { "codepoints": [42], "characters": "\u002A" },
+ "⫰": { "codepoints": [10992], "characters": "\u2AF0" },
+ "·": { "codepoints": [183], "characters": "\u00B7" },
+ "·": { "codepoints": [183], "characters": "\u00B7" },
+ "−": { "codepoints": [8722], "characters": "\u2212" },
+ "⊟": { "codepoints": [8863], "characters": "\u229F" },
+ "∸": { "codepoints": [8760], "characters": "\u2238" },
+ "⨪": { "codepoints": [10794], "characters": "\u2A2A" },
+ "⫛": { "codepoints": [10971], "characters": "\u2ADB" },
+ "…": { "codepoints": [8230], "characters": "\u2026" },
+ "∓": { "codepoints": [8723], "characters": "\u2213" },
+ "⊧": { "codepoints": [8871], "characters": "\u22A7" },
+ "𝕞": { "codepoints": [120158], "characters": "\uD835\uDD5E" },
+ "∓": { "codepoints": [8723], "characters": "\u2213" },
+ "𝓂": { "codepoints": [120002], "characters": "\uD835\uDCC2" },
+ "∾": { "codepoints": [8766], "characters": "\u223E" },
+ "μ": { "codepoints": [956], "characters": "\u03BC" },
+ "⊸": { "codepoints": [8888], "characters": "\u22B8" },
+ "⊸": { "codepoints": [8888], "characters": "\u22B8" },
+ "⋙̸": { "codepoints": [8921, 824], "characters": "\u22D9\u0338" },
+ "≫⃒": { "codepoints": [8811, 8402], "characters": "\u226B\u20D2" },
+ "≫̸": { "codepoints": [8811, 824], "characters": "\u226B\u0338" },
+ "⇍": { "codepoints": [8653], "characters": "\u21CD" },
+ "⇎": { "codepoints": [8654], "characters": "\u21CE" },
+ "⋘̸": { "codepoints": [8920, 824], "characters": "\u22D8\u0338" },
+ "≪⃒": { "codepoints": [8810, 8402], "characters": "\u226A\u20D2" },
+ "≪̸": { "codepoints": [8810, 824], "characters": "\u226A\u0338" },
+ "⇏": { "codepoints": [8655], "characters": "\u21CF" },
+ "⊯": { "codepoints": [8879], "characters": "\u22AF" },
+ "⊮": { "codepoints": [8878], "characters": "\u22AE" },
+ "∇": { "codepoints": [8711], "characters": "\u2207" },
+ "ń": { "codepoints": [324], "characters": "\u0144" },
+ "∠⃒": { "codepoints": [8736, 8402], "characters": "\u2220\u20D2" },
+ "≉": { "codepoints": [8777], "characters": "\u2249" },
+ "⩰̸": { "codepoints": [10864, 824], "characters": "\u2A70\u0338" },
+ "≋̸": { "codepoints": [8779, 824], "characters": "\u224B\u0338" },
+ "ʼn": { "codepoints": [329], "characters": "\u0149" },
+ "≉": { "codepoints": [8777], "characters": "\u2249" },
+ "♮": { "codepoints": [9838], "characters": "\u266E" },
+ "♮": { "codepoints": [9838], "characters": "\u266E" },
+ "ℕ": { "codepoints": [8469], "characters": "\u2115" },
+ " ": { "codepoints": [160], "characters": "\u00A0" },
+ " ": { "codepoints": [160], "characters": "\u00A0" },
+ "≎̸": { "codepoints": [8782, 824], "characters": "\u224E\u0338" },
+ "≏̸": { "codepoints": [8783, 824], "characters": "\u224F\u0338" },
+ "⩃": { "codepoints": [10819], "characters": "\u2A43" },
+ "ň": { "codepoints": [328], "characters": "\u0148" },
+ "ņ": { "codepoints": [326], "characters": "\u0146" },
+ "≇": { "codepoints": [8775], "characters": "\u2247" },
+ "⩭̸": { "codepoints": [10861, 824], "characters": "\u2A6D\u0338" },
+ "⩂": { "codepoints": [10818], "characters": "\u2A42" },
+ "н": { "codepoints": [1085], "characters": "\u043D" },
+ "–": { "codepoints": [8211], "characters": "\u2013" },
+ "≠": { "codepoints": [8800], "characters": "\u2260" },
+ "⇗": { "codepoints": [8663], "characters": "\u21D7" },
+ "⤤": { "codepoints": [10532], "characters": "\u2924" },
+ "↗": { "codepoints": [8599], "characters": "\u2197" },
+ "↗": { "codepoints": [8599], "characters": "\u2197" },
+ "≐̸": { "codepoints": [8784, 824], "characters": "\u2250\u0338" },
+ "≢": { "codepoints": [8802], "characters": "\u2262" },
+ "⤨": { "codepoints": [10536], "characters": "\u2928" },
+ "≂̸": { "codepoints": [8770, 824], "characters": "\u2242\u0338" },
+ "∄": { "codepoints": [8708], "characters": "\u2204" },
+ "∄": { "codepoints": [8708], "characters": "\u2204" },
+ "𝔫": { "codepoints": [120107], "characters": "\uD835\uDD2B" },
+ "≧̸": { "codepoints": [8807, 824], "characters": "\u2267\u0338" },
+ "≱": { "codepoints": [8817], "characters": "\u2271" },
+ "≱": { "codepoints": [8817], "characters": "\u2271" },
+ "≧̸": { "codepoints": [8807, 824], "characters": "\u2267\u0338" },
+ "⩾̸": { "codepoints": [10878, 824], "characters": "\u2A7E\u0338" },
+ "⩾̸": { "codepoints": [10878, 824], "characters": "\u2A7E\u0338" },
+ "≵": { "codepoints": [8821], "characters": "\u2275" },
+ "≯": { "codepoints": [8815], "characters": "\u226F" },
+ "≯": { "codepoints": [8815], "characters": "\u226F" },
+ "⇎": { "codepoints": [8654], "characters": "\u21CE" },
+ "↮": { "codepoints": [8622], "characters": "\u21AE" },
+ "⫲": { "codepoints": [10994], "characters": "\u2AF2" },
+ "∋": { "codepoints": [8715], "characters": "\u220B" },
+ "⋼": { "codepoints": [8956], "characters": "\u22FC" },
+ "⋺": { "codepoints": [8954], "characters": "\u22FA" },
+ "∋": { "codepoints": [8715], "characters": "\u220B" },
+ "њ": { "codepoints": [1114], "characters": "\u045A" },
+ "⇍": { "codepoints": [8653], "characters": "\u21CD" },
+ "≦̸": { "codepoints": [8806, 824], "characters": "\u2266\u0338" },
+ "↚": { "codepoints": [8602], "characters": "\u219A" },
+ "‥": { "codepoints": [8229], "characters": "\u2025" },
+ "≰": { "codepoints": [8816], "characters": "\u2270" },
+ "↚": { "codepoints": [8602], "characters": "\u219A" },
+ "↮": { "codepoints": [8622], "characters": "\u21AE" },
+ "≰": { "codepoints": [8816], "characters": "\u2270" },
+ "≦̸": { "codepoints": [8806, 824], "characters": "\u2266\u0338" },
+ "⩽̸": { "codepoints": [10877, 824], "characters": "\u2A7D\u0338" },
+ "⩽̸": { "codepoints": [10877, 824], "characters": "\u2A7D\u0338" },
+ "≮": { "codepoints": [8814], "characters": "\u226E" },
+ "≴": { "codepoints": [8820], "characters": "\u2274" },
+ "≮": { "codepoints": [8814], "characters": "\u226E" },
+ "⋪": { "codepoints": [8938], "characters": "\u22EA" },
+ "⋬": { "codepoints": [8940], "characters": "\u22EC" },
+ "∤": { "codepoints": [8740], "characters": "\u2224" },
+ "𝕟": { "codepoints": [120159], "characters": "\uD835\uDD5F" },
+ "¬": { "codepoints": [172], "characters": "\u00AC" },
+ "¬": { "codepoints": [172], "characters": "\u00AC" },
+ "∉": { "codepoints": [8713], "characters": "\u2209" },
+ "⋹̸": { "codepoints": [8953, 824], "characters": "\u22F9\u0338" },
+ "⋵̸": { "codepoints": [8949, 824], "characters": "\u22F5\u0338" },
+ "∉": { "codepoints": [8713], "characters": "\u2209" },
+ "⋷": { "codepoints": [8951], "characters": "\u22F7" },
+ "⋶": { "codepoints": [8950], "characters": "\u22F6" },
+ "∌": { "codepoints": [8716], "characters": "\u220C" },
+ "∌": { "codepoints": [8716], "characters": "\u220C" },
+ "⋾": { "codepoints": [8958], "characters": "\u22FE" },
+ "⋽": { "codepoints": [8957], "characters": "\u22FD" },
+ "∦": { "codepoints": [8742], "characters": "\u2226" },
+ "∦": { "codepoints": [8742], "characters": "\u2226" },
+ "⫽⃥": { "codepoints": [11005, 8421], "characters": "\u2AFD\u20E5" },
+ "∂̸": { "codepoints": [8706, 824], "characters": "\u2202\u0338" },
+ "⨔": { "codepoints": [10772], "characters": "\u2A14" },
+ "⊀": { "codepoints": [8832], "characters": "\u2280" },
+ "⋠": { "codepoints": [8928], "characters": "\u22E0" },
+ "⪯̸": { "codepoints": [10927, 824], "characters": "\u2AAF\u0338" },
+ "⊀": { "codepoints": [8832], "characters": "\u2280" },
+ "⪯̸": { "codepoints": [10927, 824], "characters": "\u2AAF\u0338" },
+ "⇏": { "codepoints": [8655], "characters": "\u21CF" },
+ "↛": { "codepoints": [8603], "characters": "\u219B" },
+ "⤳̸": { "codepoints": [10547, 824], "characters": "\u2933\u0338" },
+ "↝̸": { "codepoints": [8605, 824], "characters": "\u219D\u0338" },
+ "↛": { "codepoints": [8603], "characters": "\u219B" },
+ "⋫": { "codepoints": [8939], "characters": "\u22EB" },
+ "⋭": { "codepoints": [8941], "characters": "\u22ED" },
+ "⊁": { "codepoints": [8833], "characters": "\u2281" },
+ "⋡": { "codepoints": [8929], "characters": "\u22E1" },
+ "⪰̸": { "codepoints": [10928, 824], "characters": "\u2AB0\u0338" },
+ "𝓃": { "codepoints": [120003], "characters": "\uD835\uDCC3" },
+ "∤": { "codepoints": [8740], "characters": "\u2224" },
+ "∦": { "codepoints": [8742], "characters": "\u2226" },
+ "≁": { "codepoints": [8769], "characters": "\u2241" },
+ "≄": { "codepoints": [8772], "characters": "\u2244" },
+ "≄": { "codepoints": [8772], "characters": "\u2244" },
+ "∤": { "codepoints": [8740], "characters": "\u2224" },
+ "∦": { "codepoints": [8742], "characters": "\u2226" },
+ "⋢": { "codepoints": [8930], "characters": "\u22E2" },
+ "⋣": { "codepoints": [8931], "characters": "\u22E3" },
+ "⊄": { "codepoints": [8836], "characters": "\u2284" },
+ "⫅̸": { "codepoints": [10949, 824], "characters": "\u2AC5\u0338" },
+ "⊈": { "codepoints": [8840], "characters": "\u2288" },
+ "⊂⃒": { "codepoints": [8834, 8402], "characters": "\u2282\u20D2" },
+ "⊈": { "codepoints": [8840], "characters": "\u2288" },
+ "⫅̸": { "codepoints": [10949, 824], "characters": "\u2AC5\u0338" },
+ "⊁": { "codepoints": [8833], "characters": "\u2281" },
+ "⪰̸": { "codepoints": [10928, 824], "characters": "\u2AB0\u0338" },
+ "⊅": { "codepoints": [8837], "characters": "\u2285" },
+ "⫆̸": { "codepoints": [10950, 824], "characters": "\u2AC6\u0338" },
+ "⊉": { "codepoints": [8841], "characters": "\u2289" },
+ "⊃⃒": { "codepoints": [8835, 8402], "characters": "\u2283\u20D2" },
+ "⊉": { "codepoints": [8841], "characters": "\u2289" },
+ "⫆̸": { "codepoints": [10950, 824], "characters": "\u2AC6\u0338" },
+ "≹": { "codepoints": [8825], "characters": "\u2279" },
+ "ñ": { "codepoints": [241], "characters": "\u00F1" },
+ "ñ": { "codepoints": [241], "characters": "\u00F1" },
+ "≸": { "codepoints": [8824], "characters": "\u2278" },
+ "⋪": { "codepoints": [8938], "characters": "\u22EA" },
+ "⋬": { "codepoints": [8940], "characters": "\u22EC" },
+ "⋫": { "codepoints": [8939], "characters": "\u22EB" },
+ "⋭": { "codepoints": [8941], "characters": "\u22ED" },
+ "ν": { "codepoints": [957], "characters": "\u03BD" },
+ "#": { "codepoints": [35], "characters": "\u0023" },
+ "№": { "codepoints": [8470], "characters": "\u2116" },
+ " ": { "codepoints": [8199], "characters": "\u2007" },
+ "⊭": { "codepoints": [8877], "characters": "\u22AD" },
+ "⤄": { "codepoints": [10500], "characters": "\u2904" },
+ "≍⃒": { "codepoints": [8781, 8402], "characters": "\u224D\u20D2" },
+ "⊬": { "codepoints": [8876], "characters": "\u22AC" },
+ "≥⃒": { "codepoints": [8805, 8402], "characters": "\u2265\u20D2" },
+ ">⃒": { "codepoints": [62, 8402], "characters": "\u003E\u20D2" },
+ "⧞": { "codepoints": [10718], "characters": "\u29DE" },
+ "⤂": { "codepoints": [10498], "characters": "\u2902" },
+ "≤⃒": { "codepoints": [8804, 8402], "characters": "\u2264\u20D2" },
+ "<⃒": { "codepoints": [60, 8402], "characters": "\u003C\u20D2" },
+ "⊴⃒": { "codepoints": [8884, 8402], "characters": "\u22B4\u20D2" },
+ "⤃": { "codepoints": [10499], "characters": "\u2903" },
+ "⊵⃒": { "codepoints": [8885, 8402], "characters": "\u22B5\u20D2" },
+ "∼⃒": { "codepoints": [8764, 8402], "characters": "\u223C\u20D2" },
+ "⇖": { "codepoints": [8662], "characters": "\u21D6" },
+ "⤣": { "codepoints": [10531], "characters": "\u2923" },
+ "↖": { "codepoints": [8598], "characters": "\u2196" },
+ "↖": { "codepoints": [8598], "characters": "\u2196" },
+ "⤧": { "codepoints": [10535], "characters": "\u2927" },
+ "Ⓢ": { "codepoints": [9416], "characters": "\u24C8" },
+ "ó": { "codepoints": [243], "characters": "\u00F3" },
+ "ó": { "codepoints": [243], "characters": "\u00F3" },
+ "⊛": { "codepoints": [8859], "characters": "\u229B" },
+ "⊚": { "codepoints": [8858], "characters": "\u229A" },
+ "ô": { "codepoints": [244], "characters": "\u00F4" },
+ "ô": { "codepoints": [244], "characters": "\u00F4" },
+ "о": { "codepoints": [1086], "characters": "\u043E" },
+ "⊝": { "codepoints": [8861], "characters": "\u229D" },
+ "ő": { "codepoints": [337], "characters": "\u0151" },
+ "⨸": { "codepoints": [10808], "characters": "\u2A38" },
+ "⊙": { "codepoints": [8857], "characters": "\u2299" },
+ "⦼": { "codepoints": [10684], "characters": "\u29BC" },
+ "œ": { "codepoints": [339], "characters": "\u0153" },
+ "⦿": { "codepoints": [10687], "characters": "\u29BF" },
+ "𝔬": { "codepoints": [120108], "characters": "\uD835\uDD2C" },
+ "˛": { "codepoints": [731], "characters": "\u02DB" },
+ "ò": { "codepoints": [242], "characters": "\u00F2" },
+ "ò": { "codepoints": [242], "characters": "\u00F2" },
+ "⧁": { "codepoints": [10689], "characters": "\u29C1" },
+ "⦵": { "codepoints": [10677], "characters": "\u29B5" },
+ "Ω": { "codepoints": [937], "characters": "\u03A9" },
+ "∮": { "codepoints": [8750], "characters": "\u222E" },
+ "↺": { "codepoints": [8634], "characters": "\u21BA" },
+ "⦾": { "codepoints": [10686], "characters": "\u29BE" },
+ "⦻": { "codepoints": [10683], "characters": "\u29BB" },
+ "‾": { "codepoints": [8254], "characters": "\u203E" },
+ "⧀": { "codepoints": [10688], "characters": "\u29C0" },
+ "ō": { "codepoints": [333], "characters": "\u014D" },
+ "ω": { "codepoints": [969], "characters": "\u03C9" },
+ "ο": { "codepoints": [959], "characters": "\u03BF" },
+ "⦶": { "codepoints": [10678], "characters": "\u29B6" },
+ "⊖": { "codepoints": [8854], "characters": "\u2296" },
+ "𝕠": { "codepoints": [120160], "characters": "\uD835\uDD60" },
+ "⦷": { "codepoints": [10679], "characters": "\u29B7" },
+ "⦹": { "codepoints": [10681], "characters": "\u29B9" },
+ "⊕": { "codepoints": [8853], "characters": "\u2295" },
+ "∨": { "codepoints": [8744], "characters": "\u2228" },
+ "↻": { "codepoints": [8635], "characters": "\u21BB" },
+ "⩝": { "codepoints": [10845], "characters": "\u2A5D" },
+ "ℴ": { "codepoints": [8500], "characters": "\u2134" },
+ "ℴ": { "codepoints": [8500], "characters": "\u2134" },
+ "ª": { "codepoints": [170], "characters": "\u00AA" },
+ "ª": { "codepoints": [170], "characters": "\u00AA" },
+ "º": { "codepoints": [186], "characters": "\u00BA" },
+ "º": { "codepoints": [186], "characters": "\u00BA" },
+ "⊶": { "codepoints": [8886], "characters": "\u22B6" },
+ "⩖": { "codepoints": [10838], "characters": "\u2A56" },
+ "⩗": { "codepoints": [10839], "characters": "\u2A57" },
+ "⩛": { "codepoints": [10843], "characters": "\u2A5B" },
+ "ℴ": { "codepoints": [8500], "characters": "\u2134" },
+ "ø": { "codepoints": [248], "characters": "\u00F8" },
+ "ø": { "codepoints": [248], "characters": "\u00F8" },
+ "⊘": { "codepoints": [8856], "characters": "\u2298" },
+ "õ": { "codepoints": [245], "characters": "\u00F5" },
+ "õ": { "codepoints": [245], "characters": "\u00F5" },
+ "⊗": { "codepoints": [8855], "characters": "\u2297" },
+ "⨶": { "codepoints": [10806], "characters": "\u2A36" },
+ "ö": { "codepoints": [246], "characters": "\u00F6" },
+ "ö": { "codepoints": [246], "characters": "\u00F6" },
+ "⌽": { "codepoints": [9021], "characters": "\u233D" },
+ "∥": { "codepoints": [8741], "characters": "\u2225" },
+ "¶": { "codepoints": [182], "characters": "\u00B6" },
+ "¶": { "codepoints": [182], "characters": "\u00B6" },
+ "∥": { "codepoints": [8741], "characters": "\u2225" },
+ "⫳": { "codepoints": [10995], "characters": "\u2AF3" },
+ "⫽": { "codepoints": [11005], "characters": "\u2AFD" },
+ "∂": { "codepoints": [8706], "characters": "\u2202" },
+ "п": { "codepoints": [1087], "characters": "\u043F" },
+ "%": { "codepoints": [37], "characters": "\u0025" },
+ ".": { "codepoints": [46], "characters": "\u002E" },
+ "‰": { "codepoints": [8240], "characters": "\u2030" },
+ "⊥": { "codepoints": [8869], "characters": "\u22A5" },
+ "‱": { "codepoints": [8241], "characters": "\u2031" },
+ "𝔭": { "codepoints": [120109], "characters": "\uD835\uDD2D" },
+ "φ": { "codepoints": [966], "characters": "\u03C6" },
+ "ϕ": { "codepoints": [981], "characters": "\u03D5" },
+ "ℳ": { "codepoints": [8499], "characters": "\u2133" },
+ "☎": { "codepoints": [9742], "characters": "\u260E" },
+ "π": { "codepoints": [960], "characters": "\u03C0" },
+ "⋔": { "codepoints": [8916], "characters": "\u22D4" },
+ "ϖ": { "codepoints": [982], "characters": "\u03D6" },
+ "ℏ": { "codepoints": [8463], "characters": "\u210F" },
+ "ℎ": { "codepoints": [8462], "characters": "\u210E" },
+ "ℏ": { "codepoints": [8463], "characters": "\u210F" },
+ "+": { "codepoints": [43], "characters": "\u002B" },
+ "⨣": { "codepoints": [10787], "characters": "\u2A23" },
+ "⊞": { "codepoints": [8862], "characters": "\u229E" },
+ "⨢": { "codepoints": [10786], "characters": "\u2A22" },
+ "∔": { "codepoints": [8724], "characters": "\u2214" },
+ "⨥": { "codepoints": [10789], "characters": "\u2A25" },
+ "⩲": { "codepoints": [10866], "characters": "\u2A72" },
+ "±": { "codepoints": [177], "characters": "\u00B1" },
+ "±": { "codepoints": [177], "characters": "\u00B1" },
+ "⨦": { "codepoints": [10790], "characters": "\u2A26" },
+ "⨧": { "codepoints": [10791], "characters": "\u2A27" },
+ "±": { "codepoints": [177], "characters": "\u00B1" },
+ "⨕": { "codepoints": [10773], "characters": "\u2A15" },
+ "𝕡": { "codepoints": [120161], "characters": "\uD835\uDD61" },
+ "£": { "codepoints": [163], "characters": "\u00A3" },
+ "£": { "codepoints": [163], "characters": "\u00A3" },
+ "≺": { "codepoints": [8826], "characters": "\u227A" },
+ "⪳": { "codepoints": [10931], "characters": "\u2AB3" },
+ "⪷": { "codepoints": [10935], "characters": "\u2AB7" },
+ "≼": { "codepoints": [8828], "characters": "\u227C" },
+ "⪯": { "codepoints": [10927], "characters": "\u2AAF" },
+ "≺": { "codepoints": [8826], "characters": "\u227A" },
+ "⪷": { "codepoints": [10935], "characters": "\u2AB7" },
+ "≼": { "codepoints": [8828], "characters": "\u227C" },
+ "⪯": { "codepoints": [10927], "characters": "\u2AAF" },
+ "⪹": { "codepoints": [10937], "characters": "\u2AB9" },
+ "⪵": { "codepoints": [10933], "characters": "\u2AB5" },
+ "⋨": { "codepoints": [8936], "characters": "\u22E8" },
+ "≾": { "codepoints": [8830], "characters": "\u227E" },
+ "′": { "codepoints": [8242], "characters": "\u2032" },
+ "ℙ": { "codepoints": [8473], "characters": "\u2119" },
+ "⪵": { "codepoints": [10933], "characters": "\u2AB5" },
+ "⪹": { "codepoints": [10937], "characters": "\u2AB9" },
+ "⋨": { "codepoints": [8936], "characters": "\u22E8" },
+ "∏": { "codepoints": [8719], "characters": "\u220F" },
+ "⌮": { "codepoints": [9006], "characters": "\u232E" },
+ "⌒": { "codepoints": [8978], "characters": "\u2312" },
+ "⌓": { "codepoints": [8979], "characters": "\u2313" },
+ "∝": { "codepoints": [8733], "characters": "\u221D" },
+ "∝": { "codepoints": [8733], "characters": "\u221D" },
+ "≾": { "codepoints": [8830], "characters": "\u227E" },
+ "⊰": { "codepoints": [8880], "characters": "\u22B0" },
+ "𝓅": { "codepoints": [120005], "characters": "\uD835\uDCC5" },
+ "ψ": { "codepoints": [968], "characters": "\u03C8" },
+ " ": { "codepoints": [8200], "characters": "\u2008" },
+ "𝔮": { "codepoints": [120110], "characters": "\uD835\uDD2E" },
+ "⨌": { "codepoints": [10764], "characters": "\u2A0C" },
+ "𝕢": { "codepoints": [120162], "characters": "\uD835\uDD62" },
+ "⁗": { "codepoints": [8279], "characters": "\u2057" },
+ "𝓆": { "codepoints": [120006], "characters": "\uD835\uDCC6" },
+ "ℍ": { "codepoints": [8461], "characters": "\u210D" },
+ "⨖": { "codepoints": [10774], "characters": "\u2A16" },
+ "?": { "codepoints": [63], "characters": "\u003F" },
+ "≟": { "codepoints": [8799], "characters": "\u225F" },
+ """: { "codepoints": [34], "characters": "\u0022" },
+ """: { "codepoints": [34], "characters": "\u0022" },
+ "⇛": { "codepoints": [8667], "characters": "\u21DB" },
+ "⇒": { "codepoints": [8658], "characters": "\u21D2" },
+ "⤜": { "codepoints": [10524], "characters": "\u291C" },
+ "⤏": { "codepoints": [10511], "characters": "\u290F" },
+ "⥤": { "codepoints": [10596], "characters": "\u2964" },
+ "∽̱": { "codepoints": [8765, 817], "characters": "\u223D\u0331" },
+ "ŕ": { "codepoints": [341], "characters": "\u0155" },
+ "√": { "codepoints": [8730], "characters": "\u221A" },
+ "⦳": { "codepoints": [10675], "characters": "\u29B3" },
+ "⟩": { "codepoints": [10217], "characters": "\u27E9" },
+ "⦒": { "codepoints": [10642], "characters": "\u2992" },
+ "⦥": { "codepoints": [10661], "characters": "\u29A5" },
+ "⟩": { "codepoints": [10217], "characters": "\u27E9" },
+ "»": { "codepoints": [187], "characters": "\u00BB" },
+ "»": { "codepoints": [187], "characters": "\u00BB" },
+ "→": { "codepoints": [8594], "characters": "\u2192" },
+ "⥵": { "codepoints": [10613], "characters": "\u2975" },
+ "⇥": { "codepoints": [8677], "characters": "\u21E5" },
+ "⤠": { "codepoints": [10528], "characters": "\u2920" },
+ "⤳": { "codepoints": [10547], "characters": "\u2933" },
+ "⤞": { "codepoints": [10526], "characters": "\u291E" },
+ "↪": { "codepoints": [8618], "characters": "\u21AA" },
+ "↬": { "codepoints": [8620], "characters": "\u21AC" },
+ "⥅": { "codepoints": [10565], "characters": "\u2945" },
+ "⥴": { "codepoints": [10612], "characters": "\u2974" },
+ "↣": { "codepoints": [8611], "characters": "\u21A3" },
+ "↝": { "codepoints": [8605], "characters": "\u219D" },
+ "⤚": { "codepoints": [10522], "characters": "\u291A" },
+ "∶": { "codepoints": [8758], "characters": "\u2236" },
+ "ℚ": { "codepoints": [8474], "characters": "\u211A" },
+ "⤍": { "codepoints": [10509], "characters": "\u290D" },
+ "❳": { "codepoints": [10099], "characters": "\u2773" },
+ "}": { "codepoints": [125], "characters": "\u007D" },
+ "]": { "codepoints": [93], "characters": "\u005D" },
+ "⦌": { "codepoints": [10636], "characters": "\u298C" },
+ "⦎": { "codepoints": [10638], "characters": "\u298E" },
+ "⦐": { "codepoints": [10640], "characters": "\u2990" },
+ "ř": { "codepoints": [345], "characters": "\u0159" },
+ "ŗ": { "codepoints": [343], "characters": "\u0157" },
+ "⌉": { "codepoints": [8969], "characters": "\u2309" },
+ "}": { "codepoints": [125], "characters": "\u007D" },
+ "р": { "codepoints": [1088], "characters": "\u0440" },
+ "⤷": { "codepoints": [10551], "characters": "\u2937" },
+ "⥩": { "codepoints": [10601], "characters": "\u2969" },
+ "”": { "codepoints": [8221], "characters": "\u201D" },
+ "”": { "codepoints": [8221], "characters": "\u201D" },
+ "↳": { "codepoints": [8627], "characters": "\u21B3" },
+ "ℜ": { "codepoints": [8476], "characters": "\u211C" },
+ "ℛ": { "codepoints": [8475], "characters": "\u211B" },
+ "ℜ": { "codepoints": [8476], "characters": "\u211C" },
+ "ℝ": { "codepoints": [8477], "characters": "\u211D" },
+ "▭": { "codepoints": [9645], "characters": "\u25AD" },
+ "®": { "codepoints": [174], "characters": "\u00AE" },
+ "®": { "codepoints": [174], "characters": "\u00AE" },
+ "⥽": { "codepoints": [10621], "characters": "\u297D" },
+ "⌋": { "codepoints": [8971], "characters": "\u230B" },
+ "𝔯": { "codepoints": [120111], "characters": "\uD835\uDD2F" },
+ "⇁": { "codepoints": [8641], "characters": "\u21C1" },
+ "⇀": { "codepoints": [8640], "characters": "\u21C0" },
+ "⥬": { "codepoints": [10604], "characters": "\u296C" },
+ "ρ": { "codepoints": [961], "characters": "\u03C1" },
+ "ϱ": { "codepoints": [1009], "characters": "\u03F1" },
+ "→": { "codepoints": [8594], "characters": "\u2192" },
+ "↣": { "codepoints": [8611], "characters": "\u21A3" },
+ "⇁": { "codepoints": [8641], "characters": "\u21C1" },
+ "⇀": { "codepoints": [8640], "characters": "\u21C0" },
+ "⇄": { "codepoints": [8644], "characters": "\u21C4" },
+ "⇌": { "codepoints": [8652], "characters": "\u21CC" },
+ "⇉": { "codepoints": [8649], "characters": "\u21C9" },
+ "↝": { "codepoints": [8605], "characters": "\u219D" },
+ "⋌": { "codepoints": [8908], "characters": "\u22CC" },
+ "˚": { "codepoints": [730], "characters": "\u02DA" },
+ "≓": { "codepoints": [8787], "characters": "\u2253" },
+ "⇄": { "codepoints": [8644], "characters": "\u21C4" },
+ "⇌": { "codepoints": [8652], "characters": "\u21CC" },
+ "‏": { "codepoints": [8207], "characters": "\u200F" },
+ "⎱": { "codepoints": [9137], "characters": "\u23B1" },
+ "⎱": { "codepoints": [9137], "characters": "\u23B1" },
+ "⫮": { "codepoints": [10990], "characters": "\u2AEE" },
+ "⟭": { "codepoints": [10221], "characters": "\u27ED" },
+ "⇾": { "codepoints": [8702], "characters": "\u21FE" },
+ "⟧": { "codepoints": [10215], "characters": "\u27E7" },
+ "⦆": { "codepoints": [10630], "characters": "\u2986" },
+ "𝕣": { "codepoints": [120163], "characters": "\uD835\uDD63" },
+ "⨮": { "codepoints": [10798], "characters": "\u2A2E" },
+ "⨵": { "codepoints": [10805], "characters": "\u2A35" },
+ ")": { "codepoints": [41], "characters": "\u0029" },
+ "⦔": { "codepoints": [10644], "characters": "\u2994" },
+ "⨒": { "codepoints": [10770], "characters": "\u2A12" },
+ "⇉": { "codepoints": [8649], "characters": "\u21C9" },
+ "›": { "codepoints": [8250], "characters": "\u203A" },
+ "𝓇": { "codepoints": [120007], "characters": "\uD835\uDCC7" },
+ "↱": { "codepoints": [8625], "characters": "\u21B1" },
+ "]": { "codepoints": [93], "characters": "\u005D" },
+ "’": { "codepoints": [8217], "characters": "\u2019" },
+ "’": { "codepoints": [8217], "characters": "\u2019" },
+ "⋌": { "codepoints": [8908], "characters": "\u22CC" },
+ "⋊": { "codepoints": [8906], "characters": "\u22CA" },
+ "▹": { "codepoints": [9657], "characters": "\u25B9" },
+ "⊵": { "codepoints": [8885], "characters": "\u22B5" },
+ "▸": { "codepoints": [9656], "characters": "\u25B8" },
+ "⧎": { "codepoints": [10702], "characters": "\u29CE" },
+ "⥨": { "codepoints": [10600], "characters": "\u2968" },
+ "℞": { "codepoints": [8478], "characters": "\u211E" },
+ "ś": { "codepoints": [347], "characters": "\u015B" },
+ "‚": { "codepoints": [8218], "characters": "\u201A" },
+ "≻": { "codepoints": [8827], "characters": "\u227B" },
+ "⪴": { "codepoints": [10932], "characters": "\u2AB4" },
+ "⪸": { "codepoints": [10936], "characters": "\u2AB8" },
+ "š": { "codepoints": [353], "characters": "\u0161" },
+ "≽": { "codepoints": [8829], "characters": "\u227D" },
+ "⪰": { "codepoints": [10928], "characters": "\u2AB0" },
+ "ş": { "codepoints": [351], "characters": "\u015F" },
+ "ŝ": { "codepoints": [349], "characters": "\u015D" },
+ "⪶": { "codepoints": [10934], "characters": "\u2AB6" },
+ "⪺": { "codepoints": [10938], "characters": "\u2ABA" },
+ "⋩": { "codepoints": [8937], "characters": "\u22E9" },
+ "⨓": { "codepoints": [10771], "characters": "\u2A13" },
+ "≿": { "codepoints": [8831], "characters": "\u227F" },
+ "с": { "codepoints": [1089], "characters": "\u0441" },
+ "⋅": { "codepoints": [8901], "characters": "\u22C5" },
+ "⊡": { "codepoints": [8865], "characters": "\u22A1" },
+ "⩦": { "codepoints": [10854], "characters": "\u2A66" },
+ "⇘": { "codepoints": [8664], "characters": "\u21D8" },
+ "⤥": { "codepoints": [10533], "characters": "\u2925" },
+ "↘": { "codepoints": [8600], "characters": "\u2198" },
+ "↘": { "codepoints": [8600], "characters": "\u2198" },
+ "§": { "codepoints": [167], "characters": "\u00A7" },
+ "§": { "codepoints": [167], "characters": "\u00A7" },
+ ";": { "codepoints": [59], "characters": "\u003B" },
+ "⤩": { "codepoints": [10537], "characters": "\u2929" },
+ "∖": { "codepoints": [8726], "characters": "\u2216" },
+ "∖": { "codepoints": [8726], "characters": "\u2216" },
+ "✶": { "codepoints": [10038], "characters": "\u2736" },
+ "𝔰": { "codepoints": [120112], "characters": "\uD835\uDD30" },
+ "⌢": { "codepoints": [8994], "characters": "\u2322" },
+ "♯": { "codepoints": [9839], "characters": "\u266F" },
+ "щ": { "codepoints": [1097], "characters": "\u0449" },
+ "ш": { "codepoints": [1096], "characters": "\u0448" },
+ "∣": { "codepoints": [8739], "characters": "\u2223" },
+ "∥": { "codepoints": [8741], "characters": "\u2225" },
+ "­": { "codepoints": [173], "characters": "\u00AD" },
+ "­": { "codepoints": [173], "characters": "\u00AD" },
+ "σ": { "codepoints": [963], "characters": "\u03C3" },
+ "ς": { "codepoints": [962], "characters": "\u03C2" },
+ "ς": { "codepoints": [962], "characters": "\u03C2" },
+ "∼": { "codepoints": [8764], "characters": "\u223C" },
+ "⩪": { "codepoints": [10858], "characters": "\u2A6A" },
+ "≃": { "codepoints": [8771], "characters": "\u2243" },
+ "≃": { "codepoints": [8771], "characters": "\u2243" },
+ "⪞": { "codepoints": [10910], "characters": "\u2A9E" },
+ "⪠": { "codepoints": [10912], "characters": "\u2AA0" },
+ "⪝": { "codepoints": [10909], "characters": "\u2A9D" },
+ "⪟": { "codepoints": [10911], "characters": "\u2A9F" },
+ "≆": { "codepoints": [8774], "characters": "\u2246" },
+ "⨤": { "codepoints": [10788], "characters": "\u2A24" },
+ "⥲": { "codepoints": [10610], "characters": "\u2972" },
+ "←": { "codepoints": [8592], "characters": "\u2190" },
+ "∖": { "codepoints": [8726], "characters": "\u2216" },
+ "⨳": { "codepoints": [10803], "characters": "\u2A33" },
+ "⧤": { "codepoints": [10724], "characters": "\u29E4" },
+ "∣": { "codepoints": [8739], "characters": "\u2223" },
+ "⌣": { "codepoints": [8995], "characters": "\u2323" },
+ "⪪": { "codepoints": [10922], "characters": "\u2AAA" },
+ "⪬": { "codepoints": [10924], "characters": "\u2AAC" },
+ "⪬︀": { "codepoints": [10924, 65024], "characters": "\u2AAC\uFE00" },
+ "ь": { "codepoints": [1100], "characters": "\u044C" },
+ "/": { "codepoints": [47], "characters": "\u002F" },
+ "⧄": { "codepoints": [10692], "characters": "\u29C4" },
+ "⌿": { "codepoints": [9023], "characters": "\u233F" },
+ "𝕤": { "codepoints": [120164], "characters": "\uD835\uDD64" },
+ "♠": { "codepoints": [9824], "characters": "\u2660" },
+ "♠": { "codepoints": [9824], "characters": "\u2660" },
+ "∥": { "codepoints": [8741], "characters": "\u2225" },
+ "⊓": { "codepoints": [8851], "characters": "\u2293" },
+ "⊓︀": { "codepoints": [8851, 65024], "characters": "\u2293\uFE00" },
+ "⊔": { "codepoints": [8852], "characters": "\u2294" },
+ "⊔︀": { "codepoints": [8852, 65024], "characters": "\u2294\uFE00" },
+ "⊏": { "codepoints": [8847], "characters": "\u228F" },
+ "⊑": { "codepoints": [8849], "characters": "\u2291" },
+ "⊏": { "codepoints": [8847], "characters": "\u228F" },
+ "⊑": { "codepoints": [8849], "characters": "\u2291" },
+ "⊐": { "codepoints": [8848], "characters": "\u2290" },
+ "⊒": { "codepoints": [8850], "characters": "\u2292" },
+ "⊐": { "codepoints": [8848], "characters": "\u2290" },
+ "⊒": { "codepoints": [8850], "characters": "\u2292" },
+ "□": { "codepoints": [9633], "characters": "\u25A1" },
+ "□": { "codepoints": [9633], "characters": "\u25A1" },
+ "▪": { "codepoints": [9642], "characters": "\u25AA" },
+ "▪": { "codepoints": [9642], "characters": "\u25AA" },
+ "→": { "codepoints": [8594], "characters": "\u2192" },
+ "𝓈": { "codepoints": [120008], "characters": "\uD835\uDCC8" },
+ "∖": { "codepoints": [8726], "characters": "\u2216" },
+ "⌣": { "codepoints": [8995], "characters": "\u2323" },
+ "⋆": { "codepoints": [8902], "characters": "\u22C6" },
+ "☆": { "codepoints": [9734], "characters": "\u2606" },
+ "★": { "codepoints": [9733], "characters": "\u2605" },
+ "ϵ": { "codepoints": [1013], "characters": "\u03F5" },
+ "ϕ": { "codepoints": [981], "characters": "\u03D5" },
+ "¯": { "codepoints": [175], "characters": "\u00AF" },
+ "⊂": { "codepoints": [8834], "characters": "\u2282" },
+ "⫅": { "codepoints": [10949], "characters": "\u2AC5" },
+ "⪽": { "codepoints": [10941], "characters": "\u2ABD" },
+ "⊆": { "codepoints": [8838], "characters": "\u2286" },
+ "⫃": { "codepoints": [10947], "characters": "\u2AC3" },
+ "⫁": { "codepoints": [10945], "characters": "\u2AC1" },
+ "⫋": { "codepoints": [10955], "characters": "\u2ACB" },
+ "⊊": { "codepoints": [8842], "characters": "\u228A" },
+ "⪿": { "codepoints": [10943], "characters": "\u2ABF" },
+ "⥹": { "codepoints": [10617], "characters": "\u2979" },
+ "⊂": { "codepoints": [8834], "characters": "\u2282" },
+ "⊆": { "codepoints": [8838], "characters": "\u2286" },
+ "⫅": { "codepoints": [10949], "characters": "\u2AC5" },
+ "⊊": { "codepoints": [8842], "characters": "\u228A" },
+ "⫋": { "codepoints": [10955], "characters": "\u2ACB" },
+ "⫇": { "codepoints": [10951], "characters": "\u2AC7" },
+ "⫕": { "codepoints": [10965], "characters": "\u2AD5" },
+ "⫓": { "codepoints": [10963], "characters": "\u2AD3" },
+ "≻": { "codepoints": [8827], "characters": "\u227B" },
+ "⪸": { "codepoints": [10936], "characters": "\u2AB8" },
+ "≽": { "codepoints": [8829], "characters": "\u227D" },
+ "⪰": { "codepoints": [10928], "characters": "\u2AB0" },
+ "⪺": { "codepoints": [10938], "characters": "\u2ABA" },
+ "⪶": { "codepoints": [10934], "characters": "\u2AB6" },
+ "⋩": { "codepoints": [8937], "characters": "\u22E9" },
+ "≿": { "codepoints": [8831], "characters": "\u227F" },
+ "∑": { "codepoints": [8721], "characters": "\u2211" },
+ "♪": { "codepoints": [9834], "characters": "\u266A" },
+ "¹": { "codepoints": [185], "characters": "\u00B9" },
+ "¹": { "codepoints": [185], "characters": "\u00B9" },
+ "²": { "codepoints": [178], "characters": "\u00B2" },
+ "²": { "codepoints": [178], "characters": "\u00B2" },
+ "³": { "codepoints": [179], "characters": "\u00B3" },
+ "³": { "codepoints": [179], "characters": "\u00B3" },
+ "⊃": { "codepoints": [8835], "characters": "\u2283" },
+ "⫆": { "codepoints": [10950], "characters": "\u2AC6" },
+ "⪾": { "codepoints": [10942], "characters": "\u2ABE" },
+ "⫘": { "codepoints": [10968], "characters": "\u2AD8" },
+ "⊇": { "codepoints": [8839], "characters": "\u2287" },
+ "⫄": { "codepoints": [10948], "characters": "\u2AC4" },
+ "⟉": { "codepoints": [10185], "characters": "\u27C9" },
+ "⫗": { "codepoints": [10967], "characters": "\u2AD7" },
+ "⥻": { "codepoints": [10619], "characters": "\u297B" },
+ "⫂": { "codepoints": [10946], "characters": "\u2AC2" },
+ "⫌": { "codepoints": [10956], "characters": "\u2ACC" },
+ "⊋": { "codepoints": [8843], "characters": "\u228B" },
+ "⫀": { "codepoints": [10944], "characters": "\u2AC0" },
+ "⊃": { "codepoints": [8835], "characters": "\u2283" },
+ "⊇": { "codepoints": [8839], "characters": "\u2287" },
+ "⫆": { "codepoints": [10950], "characters": "\u2AC6" },
+ "⊋": { "codepoints": [8843], "characters": "\u228B" },
+ "⫌": { "codepoints": [10956], "characters": "\u2ACC" },
+ "⫈": { "codepoints": [10952], "characters": "\u2AC8" },
+ "⫔": { "codepoints": [10964], "characters": "\u2AD4" },
+ "⫖": { "codepoints": [10966], "characters": "\u2AD6" },
+ "⇙": { "codepoints": [8665], "characters": "\u21D9" },
+ "⤦": { "codepoints": [10534], "characters": "\u2926" },
+ "↙": { "codepoints": [8601], "characters": "\u2199" },
+ "↙": { "codepoints": [8601], "characters": "\u2199" },
+ "⤪": { "codepoints": [10538], "characters": "\u292A" },
+ "ß": { "codepoints": [223], "characters": "\u00DF" },
+ "ß": { "codepoints": [223], "characters": "\u00DF" },
+ "⌖": { "codepoints": [8982], "characters": "\u2316" },
+ "τ": { "codepoints": [964], "characters": "\u03C4" },
+ "⎴": { "codepoints": [9140], "characters": "\u23B4" },
+ "ť": { "codepoints": [357], "characters": "\u0165" },
+ "ţ": { "codepoints": [355], "characters": "\u0163" },
+ "т": { "codepoints": [1090], "characters": "\u0442" },
+ "⃛": { "codepoints": [8411], "characters": "\u20DB" },
+ "⌕": { "codepoints": [8981], "characters": "\u2315" },
+ "𝔱": { "codepoints": [120113], "characters": "\uD835\uDD31" },
+ "∴": { "codepoints": [8756], "characters": "\u2234" },
+ "∴": { "codepoints": [8756], "characters": "\u2234" },
+ "θ": { "codepoints": [952], "characters": "\u03B8" },
+ "ϑ": { "codepoints": [977], "characters": "\u03D1" },
+ "ϑ": { "codepoints": [977], "characters": "\u03D1" },
+ "≈": { "codepoints": [8776], "characters": "\u2248" },
+ "∼": { "codepoints": [8764], "characters": "\u223C" },
+ " ": { "codepoints": [8201], "characters": "\u2009" },
+ "≈": { "codepoints": [8776], "characters": "\u2248" },
+ "∼": { "codepoints": [8764], "characters": "\u223C" },
+ "þ": { "codepoints": [254], "characters": "\u00FE" },
+ "þ": { "codepoints": [254], "characters": "\u00FE" },
+ "˜": { "codepoints": [732], "characters": "\u02DC" },
+ "×": { "codepoints": [215], "characters": "\u00D7" },
+ "×": { "codepoints": [215], "characters": "\u00D7" },
+ "⊠": { "codepoints": [8864], "characters": "\u22A0" },
+ "⨱": { "codepoints": [10801], "characters": "\u2A31" },
+ "⨰": { "codepoints": [10800], "characters": "\u2A30" },
+ "∭": { "codepoints": [8749], "characters": "\u222D" },
+ "⤨": { "codepoints": [10536], "characters": "\u2928" },
+ "⊤": { "codepoints": [8868], "characters": "\u22A4" },
+ "⌶": { "codepoints": [9014], "characters": "\u2336" },
+ "⫱": { "codepoints": [10993], "characters": "\u2AF1" },
+ "𝕥": { "codepoints": [120165], "characters": "\uD835\uDD65" },
+ "⫚": { "codepoints": [10970], "characters": "\u2ADA" },
+ "⤩": { "codepoints": [10537], "characters": "\u2929" },
+ "‴": { "codepoints": [8244], "characters": "\u2034" },
+ "™": { "codepoints": [8482], "characters": "\u2122" },
+ "▵": { "codepoints": [9653], "characters": "\u25B5" },
+ "▿": { "codepoints": [9663], "characters": "\u25BF" },
+ "◃": { "codepoints": [9667], "characters": "\u25C3" },
+ "⊴": { "codepoints": [8884], "characters": "\u22B4" },
+ "≜": { "codepoints": [8796], "characters": "\u225C" },
+ "▹": { "codepoints": [9657], "characters": "\u25B9" },
+ "⊵": { "codepoints": [8885], "characters": "\u22B5" },
+ "◬": { "codepoints": [9708], "characters": "\u25EC" },
+ "≜": { "codepoints": [8796], "characters": "\u225C" },
+ "⨺": { "codepoints": [10810], "characters": "\u2A3A" },
+ "⨹": { "codepoints": [10809], "characters": "\u2A39" },
+ "⧍": { "codepoints": [10701], "characters": "\u29CD" },
+ "⨻": { "codepoints": [10811], "characters": "\u2A3B" },
+ "⏢": { "codepoints": [9186], "characters": "\u23E2" },
+ "𝓉": { "codepoints": [120009], "characters": "\uD835\uDCC9" },
+ "ц": { "codepoints": [1094], "characters": "\u0446" },
+ "ћ": { "codepoints": [1115], "characters": "\u045B" },
+ "ŧ": { "codepoints": [359], "characters": "\u0167" },
+ "≬": { "codepoints": [8812], "characters": "\u226C" },
+ "↞": { "codepoints": [8606], "characters": "\u219E" },
+ "↠": { "codepoints": [8608], "characters": "\u21A0" },
+ "⇑": { "codepoints": [8657], "characters": "\u21D1" },
+ "⥣": { "codepoints": [10595], "characters": "\u2963" },
+ "ú": { "codepoints": [250], "characters": "\u00FA" },
+ "ú": { "codepoints": [250], "characters": "\u00FA" },
+ "↑": { "codepoints": [8593], "characters": "\u2191" },
+ "ў": { "codepoints": [1118], "characters": "\u045E" },
+ "ŭ": { "codepoints": [365], "characters": "\u016D" },
+ "û": { "codepoints": [251], "characters": "\u00FB" },
+ "û": { "codepoints": [251], "characters": "\u00FB" },
+ "у": { "codepoints": [1091], "characters": "\u0443" },
+ "⇅": { "codepoints": [8645], "characters": "\u21C5" },
+ "ű": { "codepoints": [369], "characters": "\u0171" },
+ "⥮": { "codepoints": [10606], "characters": "\u296E" },
+ "⥾": { "codepoints": [10622], "characters": "\u297E" },
+ "𝔲": { "codepoints": [120114], "characters": "\uD835\uDD32" },
+ "ù": { "codepoints": [249], "characters": "\u00F9" },
+ "ù": { "codepoints": [249], "characters": "\u00F9" },
+ "↿": { "codepoints": [8639], "characters": "\u21BF" },
+ "↾": { "codepoints": [8638], "characters": "\u21BE" },
+ "▀": { "codepoints": [9600], "characters": "\u2580" },
+ "⌜": { "codepoints": [8988], "characters": "\u231C" },
+ "⌜": { "codepoints": [8988], "characters": "\u231C" },
+ "⌏": { "codepoints": [8975], "characters": "\u230F" },
+ "◸": { "codepoints": [9720], "characters": "\u25F8" },
+ "ū": { "codepoints": [363], "characters": "\u016B" },
+ "¨": { "codepoints": [168], "characters": "\u00A8" },
+ "¨": { "codepoints": [168], "characters": "\u00A8" },
+ "ų": { "codepoints": [371], "characters": "\u0173" },
+ "𝕦": { "codepoints": [120166], "characters": "\uD835\uDD66" },
+ "↑": { "codepoints": [8593], "characters": "\u2191" },
+ "↕": { "codepoints": [8597], "characters": "\u2195" },
+ "↿": { "codepoints": [8639], "characters": "\u21BF" },
+ "↾": { "codepoints": [8638], "characters": "\u21BE" },
+ "⊎": { "codepoints": [8846], "characters": "\u228E" },
+ "υ": { "codepoints": [965], "characters": "\u03C5" },
+ "ϒ": { "codepoints": [978], "characters": "\u03D2" },
+ "υ": { "codepoints": [965], "characters": "\u03C5" },
+ "⇈": { "codepoints": [8648], "characters": "\u21C8" },
+ "⌝": { "codepoints": [8989], "characters": "\u231D" },
+ "⌝": { "codepoints": [8989], "characters": "\u231D" },
+ "⌎": { "codepoints": [8974], "characters": "\u230E" },
+ "ů": { "codepoints": [367], "characters": "\u016F" },
+ "◹": { "codepoints": [9721], "characters": "\u25F9" },
+ "𝓊": { "codepoints": [120010], "characters": "\uD835\uDCCA" },
+ "⋰": { "codepoints": [8944], "characters": "\u22F0" },
+ "ũ": { "codepoints": [361], "characters": "\u0169" },
+ "▵": { "codepoints": [9653], "characters": "\u25B5" },
+ "▴": { "codepoints": [9652], "characters": "\u25B4" },
+ "⇈": { "codepoints": [8648], "characters": "\u21C8" },
+ "ü": { "codepoints": [252], "characters": "\u00FC" },
+ "ü": { "codepoints": [252], "characters": "\u00FC" },
+ "⦧": { "codepoints": [10663], "characters": "\u29A7" },
+ "⇕": { "codepoints": [8661], "characters": "\u21D5" },
+ "⫨": { "codepoints": [10984], "characters": "\u2AE8" },
+ "⫩": { "codepoints": [10985], "characters": "\u2AE9" },
+ "⊨": { "codepoints": [8872], "characters": "\u22A8" },
+ "⦜": { "codepoints": [10652], "characters": "\u299C" },
+ "ϵ": { "codepoints": [1013], "characters": "\u03F5" },
+ "ϰ": { "codepoints": [1008], "characters": "\u03F0" },
+ "∅": { "codepoints": [8709], "characters": "\u2205" },
+ "ϕ": { "codepoints": [981], "characters": "\u03D5" },
+ "ϖ": { "codepoints": [982], "characters": "\u03D6" },
+ "∝": { "codepoints": [8733], "characters": "\u221D" },
+ "↕": { "codepoints": [8597], "characters": "\u2195" },
+ "ϱ": { "codepoints": [1009], "characters": "\u03F1" },
+ "ς": { "codepoints": [962], "characters": "\u03C2" },
+ "⊊︀": { "codepoints": [8842, 65024], "characters": "\u228A\uFE00" },
+ "⫋︀": { "codepoints": [10955, 65024], "characters": "\u2ACB\uFE00" },
+ "⊋︀": { "codepoints": [8843, 65024], "characters": "\u228B\uFE00" },
+ "⫌︀": { "codepoints": [10956, 65024], "characters": "\u2ACC\uFE00" },
+ "ϑ": { "codepoints": [977], "characters": "\u03D1" },
+ "⊲": { "codepoints": [8882], "characters": "\u22B2" },
+ "⊳": { "codepoints": [8883], "characters": "\u22B3" },
+ "в": { "codepoints": [1074], "characters": "\u0432" },
+ "⊢": { "codepoints": [8866], "characters": "\u22A2" },
+ "∨": { "codepoints": [8744], "characters": "\u2228" },
+ "⊻": { "codepoints": [8891], "characters": "\u22BB" },
+ "≚": { "codepoints": [8794], "characters": "\u225A" },
+ "⋮": { "codepoints": [8942], "characters": "\u22EE" },
+ "|": { "codepoints": [124], "characters": "\u007C" },
+ "|": { "codepoints": [124], "characters": "\u007C" },
+ "𝔳": { "codepoints": [120115], "characters": "\uD835\uDD33" },
+ "⊲": { "codepoints": [8882], "characters": "\u22B2" },
+ "⊂⃒": { "codepoints": [8834, 8402], "characters": "\u2282\u20D2" },
+ "⊃⃒": { "codepoints": [8835, 8402], "characters": "\u2283\u20D2" },
+ "𝕧": { "codepoints": [120167], "characters": "\uD835\uDD67" },
+ "∝": { "codepoints": [8733], "characters": "\u221D" },
+ "⊳": { "codepoints": [8883], "characters": "\u22B3" },
+ "𝓋": { "codepoints": [120011], "characters": "\uD835\uDCCB" },
+ "⫋︀": { "codepoints": [10955, 65024], "characters": "\u2ACB\uFE00" },
+ "⊊︀": { "codepoints": [8842, 65024], "characters": "\u228A\uFE00" },
+ "⫌︀": { "codepoints": [10956, 65024], "characters": "\u2ACC\uFE00" },
+ "⊋︀": { "codepoints": [8843, 65024], "characters": "\u228B\uFE00" },
+ "⦚": { "codepoints": [10650], "characters": "\u299A" },
+ "ŵ": { "codepoints": [373], "characters": "\u0175" },
+ "⩟": { "codepoints": [10847], "characters": "\u2A5F" },
+ "∧": { "codepoints": [8743], "characters": "\u2227" },
+ "≙": { "codepoints": [8793], "characters": "\u2259" },
+ "℘": { "codepoints": [8472], "characters": "\u2118" },
+ "𝔴": { "codepoints": [120116], "characters": "\uD835\uDD34" },
+ "𝕨": { "codepoints": [120168], "characters": "\uD835\uDD68" },
+ "℘": { "codepoints": [8472], "characters": "\u2118" },
+ "≀": { "codepoints": [8768], "characters": "\u2240" },
+ "≀": { "codepoints": [8768], "characters": "\u2240" },
+ "𝓌": { "codepoints": [120012], "characters": "\uD835\uDCCC" },
+ "⋂": { "codepoints": [8898], "characters": "\u22C2" },
+ "◯": { "codepoints": [9711], "characters": "\u25EF" },
+ "⋃": { "codepoints": [8899], "characters": "\u22C3" },
+ "▽": { "codepoints": [9661], "characters": "\u25BD" },
+ "𝔵": { "codepoints": [120117], "characters": "\uD835\uDD35" },
+ "⟺": { "codepoints": [10234], "characters": "\u27FA" },
+ "⟷": { "codepoints": [10231], "characters": "\u27F7" },
+ "ξ": { "codepoints": [958], "characters": "\u03BE" },
+ "⟸": { "codepoints": [10232], "characters": "\u27F8" },
+ "⟵": { "codepoints": [10229], "characters": "\u27F5" },
+ "⟼": { "codepoints": [10236], "characters": "\u27FC" },
+ "⋻": { "codepoints": [8955], "characters": "\u22FB" },
+ "⨀": { "codepoints": [10752], "characters": "\u2A00" },
+ "𝕩": { "codepoints": [120169], "characters": "\uD835\uDD69" },
+ "⨁": { "codepoints": [10753], "characters": "\u2A01" },
+ "⨂": { "codepoints": [10754], "characters": "\u2A02" },
+ "⟹": { "codepoints": [10233], "characters": "\u27F9" },
+ "⟶": { "codepoints": [10230], "characters": "\u27F6" },
+ "𝓍": { "codepoints": [120013], "characters": "\uD835\uDCCD" },
+ "⨆": { "codepoints": [10758], "characters": "\u2A06" },
+ "⨄": { "codepoints": [10756], "characters": "\u2A04" },
+ "△": { "codepoints": [9651], "characters": "\u25B3" },
+ "⋁": { "codepoints": [8897], "characters": "\u22C1" },
+ "⋀": { "codepoints": [8896], "characters": "\u22C0" },
+ "ý": { "codepoints": [253], "characters": "\u00FD" },
+ "ý": { "codepoints": [253], "characters": "\u00FD" },
+ "я": { "codepoints": [1103], "characters": "\u044F" },
+ "ŷ": { "codepoints": [375], "characters": "\u0177" },
+ "ы": { "codepoints": [1099], "characters": "\u044B" },
+ "¥": { "codepoints": [165], "characters": "\u00A5" },
+ "¥": { "codepoints": [165], "characters": "\u00A5" },
+ "𝔶": { "codepoints": [120118], "characters": "\uD835\uDD36" },
+ "ї": { "codepoints": [1111], "characters": "\u0457" },
+ "𝕪": { "codepoints": [120170], "characters": "\uD835\uDD6A" },
+ "𝓎": { "codepoints": [120014], "characters": "\uD835\uDCCE" },
+ "ю": { "codepoints": [1102], "characters": "\u044E" },
+ "ÿ": { "codepoints": [255], "characters": "\u00FF" },
+ "ÿ": { "codepoints": [255], "characters": "\u00FF" },
+ "ź": { "codepoints": [378], "characters": "\u017A" },
+ "ž": { "codepoints": [382], "characters": "\u017E" },
+ "з": { "codepoints": [1079], "characters": "\u0437" },
+ "ż": { "codepoints": [380], "characters": "\u017C" },
+ "ℨ": { "codepoints": [8488], "characters": "\u2128" },
+ "ζ": { "codepoints": [950], "characters": "\u03B6" },
+ "𝔷": { "codepoints": [120119], "characters": "\uD835\uDD37" },
+ "ж": { "codepoints": [1078], "characters": "\u0436" },
+ "⇝": { "codepoints": [8669], "characters": "\u21DD" },
+ "𝕫": { "codepoints": [120171], "characters": "\uD835\uDD6B" },
+ "𝓏": { "codepoints": [120015], "characters": "\uD835\uDCCF" },
+ "‍": { "codepoints": [8205], "characters": "\u200D" },
+ "‌": { "codepoints": [8204], "characters": "\u200C" }
+}
--- /dev/null
+! Copyright (C) 2020 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: html5 kernel multiline tools.test ;
+IN: html5.tests
+
+![===[
+{ } [ "&" parse-html5 ] unit-test
+
+
+[[ <!DOCTYPE html>
+<html>
+<head>
+<title>Title</title>
+</head>
+
+<body>
+The content
+</body>
+
+</html>]] parse-html5
+]===]
+
+
+
+{ } [
+[[ <!DOCTYPE html>
+<html>
+<head>
+</head>
+
+<body>
+The content
+</body>
+
+</html>]] parse-html5 drop
+] unit-test
+
--- /dev/null
+! Copyright (C) 2020 Doug Coleman.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors arrays assocs combinators
+combinators.short-circuit io io.encodings.utf8 io.files
+json.reader kernel math math.order memoize modern.slices
+prettyprint sequences sequences.extras strings suffix-arrays
+words ;
+IN: html5
+
+: 1sbuf ( ch -- sbuf ) [ SBUF" " clone ] dip over push ; inline
+: ?1sbuf ( ch -- sbuf ) [ SBUF" " clone ] dip [ over push ] when* ; inline
+
+! https://html.spec.whatwg.org/multipage/parsing.html#tokenization
+
+! https://infra.spec.whatwg.org/#namespaces
+CONSTANT: html-namespace "http://www.w3.org/1999/xhtml"
+CONSTANT: mathml-namespace "http://www.w3.org/1998/Math/MathML"
+CONSTANT: svg-namespace "http://www.w3.org/2000/svg"
+CONSTANT: xlink-namespace "http://www.w3.org/1999/xlink"
+CONSTANT: xml-namespace "http://www.w3.org/XML/1998/namespace"
+CONSTANT: xmlns-namespace "http://www.w3.org/2000/xmlns/"
+
+DEFER: data-state
+DEFER: (data-state)
+DEFER: rcdata-state
+DEFER: (rcdata-state)
+DEFER: rawtext-state
+DEFER: (rawtext-state)
+DEFER: script-data-state
+DEFER: (script-data-state)
+DEFER: plaintext-state
+DEFER: (plaintext-state)
+DEFER: tag-open-state
+DEFER: (tag-open-state)
+DEFER: end-tag-open-state
+DEFER: (end-tag-open-state)
+DEFER: tag-name-state
+DEFER: (tag-name-state)
+DEFER: rcdata-less-than-sign-state
+DEFER: (rcdata-less-than-sign-state)
+DEFER: rcdata-end-tag-open-state
+DEFER: (rcdata-end-tag-open-state)
+DEFER: rcdata-end-tag-name-state
+DEFER: (rcdata-end-tag-name-state)
+DEFER: rawtext-less-than-sign-state
+DEFER: (rawtext-less-than-sign-state)
+DEFER: rawtext-end-tag-open-state
+DEFER: (rawtext-end-tag-open-state)
+DEFER: rawtext-end-tag-name-state
+DEFER: (rawtext-end-tag-name-state)
+DEFER: script-data-less-than-sign-state
+DEFER: (script-data-less-than-sign-state)
+DEFER: script-data-end-tag-open-state
+DEFER: (script-data-end-tag-open-state)
+DEFER: script-data-end-tag-name-state
+DEFER: (script-data-end-tag-name-state)
+DEFER: script-data-escape-start-state
+DEFER: (script-data-escape-start-state)
+DEFER: script-data-escape-start-dash-state
+DEFER: (script-data-escape-start-dash-state)
+DEFER: script-data-escaped-state
+DEFER: (script-data-escaped-state)
+DEFER: script-data-escaped-dash-state
+DEFER: (script-data-escaped-dash-state)
+DEFER: script-data-escaped-dash-dash-state
+DEFER: (script-data-escaped-dash-dash-state)
+DEFER: script-data-escaped-less-than-sign-state
+DEFER: (script-data-escaped-less-than-sign-state)
+DEFER: script-data-escaped-end-tag-open-state
+DEFER: (script-data-escaped-end-tag-open-state)
+DEFER: script-data-escaped-end-tag-name-state
+DEFER: (script-data-escaped-end-tag-name-state)
+DEFER: script-data-double-escape-start-state
+DEFER: (script-data-double-escape-start-state)
+DEFER: script-data-double-escaped-state
+DEFER: (script-data-double-escaped-state)
+DEFER: script-data-double-escaped-dash-state
+DEFER: (script-data-double-escaped-dash-state)
+DEFER: script-data-double-escaped-dash-dash-state
+DEFER: (script-data-double-escaped-dash-dash-state)
+DEFER: script-data-double-escaped-less-than-sign-state
+DEFER: (script-data-double-escaped-less-than-sign-state)
+DEFER: script-data-double-escape-end-state
+DEFER: (script-data-double-escape-end-state)
+DEFER: before-attribute-name-state
+DEFER: (before-attribute-name-state)
+DEFER: attribute-name-state
+DEFER: (attribute-name-state)
+DEFER: after-attribute-name-state
+DEFER: (after-attribute-name-state)
+DEFER: before-attribute-value-state
+DEFER: (before-attribute-value-state)
+DEFER: attribute-value-double-quoted-state
+DEFER: (attribute-value-double-quoted-state)
+DEFER: attribute-value-single-quoted-state
+DEFER: (attribute-value-single-quoted-state)
+DEFER: attribute-value-unquoted-state
+DEFER: (attribute-value-unquoted-state)
+DEFER: after-attribute-value-quoted-state
+DEFER: (after-attribute-value-quoted-state)
+DEFER: self-closing-start-tag-state
+DEFER: (self-closing-start-tag-state)
+DEFER: bogus-comment-state
+DEFER: (bogus-comment-state)
+DEFER: markup-declaration-open-state
+DEFER: (markup-declaration-open-state)
+DEFER: comment-start-state
+DEFER: (comment-start-state)
+DEFER: comment-start-dash-state
+DEFER: (comment-start-dash-state)
+DEFER: comment-state
+DEFER: (comment-state)
+DEFER: comment-less-than-sign-state
+DEFER: (comment-less-than-sign-state)
+DEFER: comment-less-than-sign-bang-state
+DEFER: (comment-less-than-sign-bang-state)
+DEFER: comment-less-than-sign-bang-dash-state
+DEFER: (comment-less-than-sign-bang-dash-state)
+DEFER: comment-less-than-sign-bang-dash-dash-state
+DEFER: (comment-less-than-sign-bang-dash-dash-state)
+DEFER: comment-end-dash-state
+DEFER: (comment-end-dash-state)
+DEFER: comment-end-state
+DEFER: (comment-end-state)
+DEFER: comment-end-bang-state
+DEFER: (comment-end-bang-state)
+DEFER: doctype-state
+DEFER: (doctype-state)
+DEFER: before-doctype-name-state
+DEFER: (before-doctype-name-state)
+DEFER: doctype-name-state
+DEFER: (doctype-name-state)
+DEFER: after-doctype-name-state
+DEFER: (after-doctype-name-state)
+DEFER: after-doctype-public-keyword-state
+DEFER: (after-doctype-public-keyword-state)
+DEFER: before-doctype-public-identifier-state
+DEFER: (before-doctype-public-identifier-state)
+DEFER: doctype-public-identifier-double-quoted-state
+DEFER: (doctype-public-identifier-double-quoted-state)
+DEFER: doctype-public-identifier-single-quoted-state
+DEFER: (doctype-public-identifier-single-quoted-state)
+DEFER: after-doctype-public-identifier-state
+DEFER: (after-doctype-public-identifier-state)
+DEFER: between-doctype-public-and-system-identifiers-state
+DEFER: (between-doctype-public-and-system-identifiers-state)
+DEFER: after-doctype-system-keyword-state
+DEFER: (after-doctype-system-keyword-state)
+DEFER: before-doctype-system-identifier-state
+DEFER: (before-doctype-system-identifier-state)
+DEFER: doctype-system-identifier-double-quoted-state
+DEFER: (doctype-system-identifier-double-quoted-state)
+DEFER: doctype-system-identifier-single-quoted-state
+DEFER: (doctype-system-identifier-single-quoted-state)
+DEFER: after-doctype-system-identifier-state
+DEFER: (after-doctype-system-identifier-state)
+DEFER: bogus-doctype-state
+DEFER: (bogus-doctype-state)
+DEFER: cdata-section-state
+DEFER: (cdata-section-state)
+DEFER: cdata-section-bracket-state
+DEFER: (cdata-section-bracket-state)
+DEFER: cdata-section-end-state
+DEFER: (cdata-section-end-state)
+DEFER: character-reference-state
+DEFER: (character-reference-state)
+DEFER: named-character-reference-state
+DEFER: (named-character-reference-state)
+DEFER: ambiguous-ampersand-state
+DEFER: (ambiguous-ampersand-state)
+DEFER: numeric-character-reference-state
+DEFER: (numeric-character-reference-state)
+DEFER: hexadecimal-character-reference-start-state
+DEFER: (hexadecimal-character-reference-start-state)
+DEFER: decimal-character-reference-start-state
+DEFER: (decimal-character-reference-start-state)
+DEFER: hexadecimal-character-reference-state
+DEFER: (hexadecimal-character-reference-state)
+DEFER: decimal-character-reference-state
+DEFER: (decimal-character-reference-state)
+DEFER: numeric-character-reference-end-state
+DEFER: (numeric-character-reference-end-state)
+
+
+ERROR: unimplemented string ;
+ERROR: unimplemented* ;
+
+! Errors: https://html.spec.whatwg.org/multipage/parsing.html#parse-errors
+ERROR: abrupt-closing-of-empty-comment ;
+ERROR: abrupt-doctype-public-identifier ;
+ERROR: abrupt-doctype-system-identifier ;
+ERROR: absence-of-digits-in-numeric-character-reference ;
+ERROR: cdata-in-html-content ;
+ERROR: character-reference-outside-unicode-range ;
+ERROR: control-character-in-input-stream ;
+ERROR: control-character-reference ;
+ERROR: end-tag-with-attributes ;
+ERROR: duplicate-attribute ;
+ERROR: end-tag-with-trailing-solidus ;
+ERROR: eof-before-tag-name ;
+ERROR: eof-in-cdata ;
+ERROR: eof-in-comment ;
+ERROR: eof-in-doctype ;
+ERROR: eof-in-script-html-comment-like-text ;
+ERROR: eof-in-tag ;
+ERROR: incorrectly-closed-comment ;
+ERROR: incorrectly-opened-comment ;
+ERROR: invalid-character-sequence-after-doctype-name ;
+ERROR: invalid-first-character-of-tag-name ;
+ERROR: missing-attribute-value ;
+ERROR: missing-doctype-name ;
+ERROR: missing-doctype-public-identifier ;
+ERROR: missing-doctype-system-identifier ;
+ERROR: missing-end-tag-name ;
+ERROR: missing-quote-before-doctype-public-identifier ;
+
+ERROR: missing-quote-before-doctype-system-identifier ;
+ERROR: missing-semicolon-after-character-reference ;
+ERROR: missing-whitespace-after-doctype-public-keyword ;
+ERROR: missing-whitespace-after-doctype-system-keyword ;
+ERROR: missing-whitespace-before-doctype-name ;
+ERROR: missing-whitespace-between-attributes ;
+ERROR: missing-whitespace-between-doctype-public-and-system-identifiers ;
+ERROR: nested-comment ;
+ERROR: noncharacter-character-reference ;
+ERROR: noncharacter-in-input-stream ;
+ERROR: non-void-html-element-start-tag-with-trailing-solidus ;
+ERROR: null-character-reference ;
+ERROR: surrogate-character-reference ;
+ERROR: surrogate-in-input-stream ;
+ERROR: unexpected-character-after-doctype-system-identifier ;
+ERROR: unexpected-character-in-attribute-name ;
+ERROR: unexpected-character-in-unquoted-attribute-value ;
+ERROR: unexpected-equals-sign-before-attribute-name ;
+ERROR: unexpected-null-character ;
+ERROR: unexpected-question-mark-instead-of-tag-name ;
+ERROR: unexpected-solidus-in-tag ;
+ERROR: unknown-named-character-reference ;
+
+! Tree insertion modes
+SINGLETONS: initial-mode before-html-mode before-head-mode
+in-head-mode in-head-noscript-mode after-head-mode
+in-body-mode text-mode in-table-mode in-table-text-mode
+in-caption-mode in-column-group-mode in-table-body-mode
+in-row-mode in-cell-mode in-select-mode in-select-in-table-mode in-template-mode
+after-body-mode in-frameset-mode after-frameset-mode after-after-body-mode
+after-after-frameset-mode ;
+
+TUPLE: document
+quirks-mode?
+limited-quirks-mode?
+iframe-srcdoc?
+scripting? ! set in constructor
+frameset-ok? ! frameset-ok? but we want default to f
+fostering-parent?
+tree
+tree-doctype
+head-element-pointer ! set during insertion time
+parser-cannot-change-mode-flag
+insertion-mode
+original-insertion-mode
+last
+node
+context
+doctype
+tag
+end-tag
+
+tag-name
+end-tag-name
+attribute-name
+attribute-value
+temporary-buffer
+comment-token
+open-elements
+return-state ;
+
+! "reset the insertion mode appropriately"
+! : reset-insertion-mode ( document -- document )
+! f >>last
+! dup open-elements>> ?last >>node
+! dup [ open-elements>> ?first ] [ node>> ] bi = [
+! t >>last dup node>> >>context
+! ] when
+! dup node>> {
+! { [ dup name>> >lower "select" = ] [ drop in-select >>insertion-mode ] }
+! { [
+! dup name>> >lower { "td" "th" } member?
+! pick last>> f = and
+! ] [ drop in-select >>insertion-mode ] }
+! { [ dup name>> >lower "select" = ] [ drop in-select >>insertion-mode ] }
+! { [ dup name>> >lower "select" = ] [ drop in-select >>insertion-mode ] }
+! { [ dup name>> >lower "select" = ] [ drop in-select >>insertion-mode ] }
+! { [ dup name>> >lower "select" = ] [ drop in-select >>insertion-mode ] }
+! { [ dup name>> >lower "select" = ] [ drop in-select >>insertion-mode ] }
+! { [ dup name>> >lower "select" = ] [ drop in-select >>insertion-mode ] }
+! { [ dup name>> >lower "select" = ] [ drop in-select >>insertion-mode ] }
+! { [ dup name>> >lower "select" = ] [ drop in-select >>insertion-mode ] }
+! { [ dup name>> >lower "select" = ] [ drop in-select >>insertion-mode ] }
+! } cond
+! ;
+
+: temporary-buffer-attribute? ( document -- ? )
+ return-state>>
+ {
+ attribute-value-unquoted-state
+ attribute-value-single-quoted-state
+ attribute-value-double-quoted-state
+ } member? ;
+
+! name, public/system identifier should not be empty strings
+! until the state machine demands it
+TUPLE: doctype
+ name
+ public-identifier
+ system-identifier
+ quirks? ;
+
+: <doctype> ( -- doctype )
+ doctype new ; inline
+
+: new-doctype-from-ch ( ch document -- )
+ [
+ doctype new
+ swap ?1sbuf >>name
+ ] dip doctype<< ; inline
+
+: new-doctype-with-quirks ( document -- )
+ <doctype> t >>quirks? >>doctype drop ;
+
+TUPLE: tag self-closing? name attributes children end-tag ;
+
+: <tag> ( -- tag )
+ tag new
+ SBUF" " clone >>name
+ V{ } clone >>attributes
+ V{ } clone >>children ;
+
+TUPLE: end-tag self-closing? name attributes ;
+
+: <end-tag> ( -- tag )
+ end-tag new
+ SBUF" " clone >>name
+ V{ } clone >>attributes ;
+
+: new-tag ( document -- )
+ <tag> >>tag drop ;
+
+: new-end-tag ( document -- )
+ <end-tag> >>tag drop ;
+
+: set-self-closing ( document -- )
+ tag>> t >>self-closing? drop ;
+
+: <document> ( -- document )
+ document new
+ V{ } clone >>tree
+ initial-mode >>insertion-mode
+ <doctype> >>doctype
+ t >>frameset-ok?
+ ! SBUF" " clone >>tag-name
+ SBUF" " clone >>attribute-name
+ SBUF" " clone >>attribute-value
+ SBUF" " clone >>temporary-buffer
+ SBUF" " clone >>comment-token
+ V{ } clone >>open-elements
+ ; inline
+
+TUPLE: comment open payload close ;
+
+: <comment> ( payload -- comment )
+ comment new
+ swap >>payload ; inline
+
+: force-quirks ( document -- )
+ doctype>> t >>quirks? drop ;
+
+: initialize-doctype-name ( document -- )
+ [ SBUF" " clone ] dip doctype>> name<< ;
+
+: initialize-doctype-public-identifier ( document -- )
+ [ SBUF" " clone ] dip doctype>> public-identifier<< ;
+
+: initialize-doctype-system-identifier ( document -- )
+ [ SBUF" " clone ] dip doctype>> system-identifier<< ;
+
+: push-doctype-name ( ch document -- )
+ doctype>> name>> push ;
+
+: push-doctype-public-identifier ( ch document -- )
+ doctype>> public-identifier>> push ;
+
+: push-doctype-system-identifier ( ch document -- )
+ doctype>> system-identifier>> push ;
+
+! XXX: not html5 spec, fix
+ERROR: unmatched-closing-tag-error stack tag ;
+
+: unclosed-tag? ( obj -- ? )
+ { [ tag? ] [ end-tag>> not ] } 1&& ; inline
+
+:: find-matching-tag ( name stack -- seq )
+ stack [ { [ unclosed-tag? ] [ name>> name = ] } 1&& ] find-last drop [
+ stack swap shorten*
+ ] [
+ stack name unmatched-closing-tag-error
+ ] if* ;
+
+DEFER: tree-insert
+GENERIC: tree-insert* ( document obj insertion-mode -- document )
+
+: limited-quirks-mode? ( doctype -- ? )
+ {
+ [ public-identifier>> "-//W3C//DTD XHTML 1.0 Frameset//" head? ]
+ [ public-identifier>> "-//W3C//DTD XHTML 1.0 Transitional//" head? ]
+ [ { [ system-identifier>> ] [ public-identifier>> "-//W3C//DTD HTML 4.01 Frameset//" head? ] } 1&& ]
+ [ { [ system-identifier>> ] [ public-identifier>> "-//W3C//DTD HTML 4.01 Transitional//" head? ] } 1&& ]
+ } 1|| ;
+
+! https://html.spec.whatwg.org/multipage/parsing.html#the-initial-insertion-mode
+M: initial-mode tree-insert*
+ drop {
+ { [ dup "\t\n\f\r\s" member? ] [ drop ] }
+ { [ dup doctype? ] [
+ >>tree-doctype before-html-mode >>insertion-mode
+ ] }
+ { [ dup comment? ] [ over tree>> push ] }
+ { [ dup tag? ] [ over tree>> push ] }
+ { [ dup end-tag? ] [
+ dup name>> pick tree>> find-matching-tag
+ unclip
+ swap >>children
+ swap >>end-tag
+ over tree>> push
+ ] }
+ [
+ over iframe-srcdoc?>> [
+ over parser-cannot-change-mode-flag>> [
+ [ t >>quirks-mode? ] dip
+ ] unless
+ ] [
+ "must be iframe-srcdoc here" throw
+ ] if
+ ! reprocess the token
+ before-html-mode >>insertion-mode tree-insert
+ ]
+ } cond ;
+
+! https://html.spec.whatwg.org/multipage/parsing.html#the-before-html-insertion-mode
+M: before-html-mode tree-insert*
+ drop {
+ { [ dup doctype? ] [ drop ] }
+ { [ dup comment? ] [ over tree>> push ] }
+ { [ dup "\t\n\f\r\s" member? ] [ drop ] }
+ { [ dup { [ tag? ] [ name>> "html" = ] } 1&& ] [
+ over tree>> push
+ before-head-mode >>insertion-mode
+ ] }
+ ! these tags are handled in the default case
+ { [ dup { [ end-tag? ] [ name>> { "head" "body" "html" "br" } member? not ] } 1&& ] [
+ ! error end-tag, ignore
+ drop
+ ] }
+ [
+ ! Create missing html tag and reprocess the token
+ <tag> "html" >>name pick tree>> push
+ before-head-mode >>insertion-mode tree-insert
+ ]
+ } cond ;
+
+M: before-head-mode tree-insert*
+ drop {
+ { [ dup "\t\n\f\r\s" member? ] [ drop ] }
+ { [ dup comment? ] [ over tree>> push ] }
+ { [ dup doctype? ] [ drop ] }
+ { [ dup { [ tag? ] [ name>> "html" = ] } 1&& ] [
+ ! XXX: in-body-mode rules here for html tag
+ ! B
+ ! over tree>> push
+ ! before-head-mode >>insertion-mode
+ "handle html in-body-mode here" throw
+ ] }
+ { [ dup { [ tag? ] [ name>> "head" = ] } 1&& ] [
+ [ swap tree>> push ]
+ [ >>head-element-pointer drop ]
+ [ drop in-head-mode >>insertion-mode ] 2tri
+ ] }
+ ! these tags are handled in the default case
+ { [ dup { [ end-tag? ] [ name>> { "head" "body" "html" "br" } member? not ] } 1&& ] [
+ ! error end-tag, ignore
+ drop
+ ] }
+ ! ignore tag
+ { [ dup tag? ] [ drop ] }
+ [
+ ! Create missing html tag and reprocess the token
+ <tag>
+ [ "head" >>name pick tree>> push ]
+ [ >>head-element-pointer ] bi
+ in-head-mode >>insertion-mode tree-insert
+ ]
+ } cond ;
+
+M: in-head-mode tree-insert*
+ drop {
+ { [ dup "\t\n\f\r\s" member? ] [ over tree>> push ] }
+ { [ dup comment? ] [ over tree>> push ] }
+ { [ dup doctype? ] [ drop ] }
+ { [ dup { [ tag? ] [ name>> "html" = ] } 1&& ] [
+ ! XXX: in-body-mode rules here for html tag
+ ! B
+ ! over tree>> push
+ ! before-head-mode >>insertion-mode
+ "handle html in-body-mode here" throw
+ unimplemented*
+ ] }
+ { [ dup { [ tag? ] [ name>> { "base" "basefont" "bgsound" "link" } member? ] } 1&& ] [
+ ! non-void-html-element-start-tag-with-trailing-solidus soft error if not self-closing
+ unimplemented*
+ ] }
+ { [ dup { [ tag? ] [ name>> "meta" = ] } 1&& ] [
+ unimplemented*
+ ] }
+ { [ dup { [ tag? ] [ name>> "title" = ] } 1&& ] [
+ ! https://html.spec.whatwg.org/multipage/parsing.html#generic-rcdata-element-parsing-algorithm
+ "insert title node" throw
+ unimplemented*
+ ] }
+ { [
+ dup {
+ [ { [ tag? ] [ name>> "noscript" = ] [ scripting?>> ] } 1&& ]
+ [ { [ tag? ] [ name>> { "noframes" "style" } member? ] } 1&& ]
+ } 1||
+ ] [
+ ! https://html.spec.whatwg.org/multipage/parsing.html#generic-raw-text-element-parsing-algorithm
+ unimplemented*
+ ] }
+ { [ dup { [ tag? ] [ name>> "noscript" = ] [ scripting?>> not ] } 1&& ] [
+ unimplemented*
+ over tree>> push
+ in-head-noscript-mode >>insertion-mode
+ ] }
+ { [ dup { [ tag? ] [ name>> "script" = ] } 1&& ] [
+ unimplemented*
+ text-mode >>insertion-mode
+ ] }
+ { [ dup { [ end-tag? ] [ name>> "head" = ] } 1&& ] [
+ over tree>> last end-tag<<
+ after-head-mode >>insertion-mode
+ ] }
+ { [ dup { [ end-tag? ] [ name>> { "body" "html" "br" } member? ] } 1&& ] [
+ ! non-void-html-element-start-tag-with-trailing-solidus soft error if not self-closing
+ unimplemented*
+ ] }
+ { [ dup { [ tag? ] [ name>> "template" = ] } 1&& ] [
+ unimplemented*
+ in-template-mode >>insertion-mode
+ ] }
+ { [ dup { [ end-tag? ] [ name>> "template" = ] } 1&& ] [
+ unimplemented*
+ ] }
+ ! XXX: revisit this
+ { [ dup {
+ [ { [ tag? ] [ name>> "head" = ] } 1&& ]
+ [ end-tag? ]
+ } 1|| ] [ drop "ignore here" throw ] }
+ [
+ ! end head tag should be here, pop off, reprocess
+ over tree>> pop swap >>end-tag
+ after-head-mode >>insertion-mode "omg" throw
+ ]
+ } cond ;
+
+M: in-head-noscript-mode tree-insert* drop unimplemented* ;
+
+M: after-head-mode tree-insert*
+ drop {
+ { [ dup "\t\n\f\r\s" member? ] [ over tree>> push ] }
+ { [ dup comment? ] [ over tree>> push ] }
+ { [ dup doctype? ] [ drop ] }
+ { [ dup { [ tag? ] [ name>> "html" = ] } 1&& ] [
+ ! XXX: in-body-mode rules here for html tag
+ ! B
+ ! over tree>> push
+ ! before-head-mode >>insertion-mode
+ "handle html in-body-mode here" throw
+ unimplemented*
+ ] }
+ { [ dup { [ tag? ] [ name>> "html" = ] } 1&& ] [
+ unimplemented*
+ ] }
+ { [ dup { [ tag? ] [ name>> "body" = ] } 1&& ] [
+ over tree>> push
+ f >>frameset-ok?
+ in-body-mode >>insertion-mode
+ ] }
+ { [ dup { [ tag? ] [ name>> "frameset" = ] } 1&& ] [
+ unimplemented*
+ ] }
+ { [ dup { [ tag? ] [
+ name>> {
+ "base" "basefont" "bgsound" "link" "meta"
+ "noframes" "script" "style" "template" "title"
+ } member? ] } 1&&
+ ] [
+ unimplemented*
+ ] }
+ { [ dup { [ end-tag? ] [ name>> "template" = ] } 1&& ] [
+ unimplemented*
+ ] }
+ ! same as default case
+ ! { [ dup { [ end-tag? ] [ name>> { "body" "html" "br" } member? not ] } 1&& ] [
+ ! unimplemented*
+ ! ] }
+ { [
+ dup {
+ [ { [ tag? ] [ name>> "head" = ] } 1&& ]
+ [ { [ end-tag? ] [ name>> { "body" "html" "br" } member? not ] } 1&& ]
+ } 1||
+ ] [
+ "omg revisit this" throw
+ unimplemented*
+ ] }
+ [
+ B
+ <tag> "body" >>name pick tree>> push
+ in-body-mode >>insertion-mode tree-insert
+ ]
+ } cond ;
+
+M: in-body-mode tree-insert*
+ drop {
+ { [ dup CHAR: \0 = ] [ drop ] }
+ { [ dup "\t\n\f\r\s" member? ] [ over tree>> push ] }
+ { [ dup comment? ] [ over tree>> push ] }
+ { [ dup doctype? ] [ drop ] }
+ { [ dup { [ tag? ] [ name>> "html" = ] } 1&& ] [ drop ] }
+ { [ dup {
+ [
+ {
+ [ tag? ]
+ [
+ name>> {
+ "base" "basefont" "bgsound" "link" "meta"
+ "noframes" "script" "style" "template" "title"
+ } member?
+ ]
+ } 1&&
+ ] [
+ { [ end-tag? ] [ name>> "template" = ] } 1&&
+ ] } 1||
+ ] [
+ unimplemented*
+ ] }
+ ! XXX: parse error
+ { [ dup { [ tag? ] [ name>> "body" = ] } 1&& ] [ drop unimplemented* ] }
+ { [ dup { [ tag? ] [ name>> "frameset" = ] } 1&& ] [ drop unimplemented* ] }
+ ! XXX: eof
+ ! { [ ] [ ] }
+ { [ dup { [ end-tag? ] [ name>> "body" = ] } 1&& ] [
+ "body" pick tree>> find-matching-tag
+ unclip
+ swap >>children
+ swap >>end-tag
+ over tree>> push
+
+ after-body-mode >>insertion-mode
+ ] }
+ { [ dup { [ end-tag? ] [ name>> "html" = ] } 1&& ] [ drop unimplemented* ] }
+ ! { [ ] [ ] }
+ [
+ unimplemented*
+ ]
+ } cond ;
+
+M: text-mode tree-insert* drop unimplemented* ;
+M: in-table-mode tree-insert* drop unimplemented* ;
+M: in-table-text-mode tree-insert* drop unimplemented* ;
+M: in-caption-mode tree-insert* drop unimplemented* ;
+M: in-column-group-mode tree-insert* drop unimplemented* ;
+M: in-table-body-mode tree-insert* drop unimplemented* ;
+M: in-row-mode tree-insert* drop unimplemented* ;
+M: in-cell-mode tree-insert* drop unimplemented* ;
+M: in-select-mode tree-insert* drop unimplemented* ;
+M: in-select-in-table-mode tree-insert* drop unimplemented* ;
+M: in-template-mode tree-insert* drop unimplemented* ;
+M: after-body-mode tree-insert*
+ drop {
+ { [ dup "\t\n\f\r\s" member? ] [ over tree>> push ] }
+ { [ dup comment? ] [ over tree>> push ] }
+ { [ dup doctype? ] [ drop ] }
+ { [ dup { [ tag? ] [ name>> "html" = ] } 1&& ] [
+ unimplemented*
+ ] }
+ { [ dup { [ end-tag? ] [ name>> "html" = ] } 1&& ] [
+ ! XXX: make this a function
+ "html" pick tree>> find-matching-tag
+ unclip
+ swap >>children
+ swap >>end-tag
+ over tree>> push
+
+ after-after-body-mode >>insertion-mode
+ ] }
+ [
+ unimplemented*
+ ]
+ } cond ;
+M: in-frameset-mode tree-insert* drop unimplemented* ;
+M: after-frameset-mode tree-insert* drop unimplemented* ;
+
+M: after-after-body-mode tree-insert*
+ drop {
+ { [ dup comment? ] [ over tree>> push ] }
+ { [ dup doctype? ] [ unimplemented* ] }
+ { [ dup "\t\n\f\r\s" member? ] [ unimplemented* ] }
+ { [ dup { [ tag? ] [ name>> "html" = ] } 1&& ] [ unimplemented* ] }
+ ! eof
+ { [ dup f = ] [ drop ] }
+ [
+ ! XXX: parse error
+ [ in-body-mode >>insertion-mode ] dip tree-insert
+ ]
+ } cond ;
+
+M: after-after-frameset-mode tree-insert* drop unimplemented* ;
+
+: tree-insert ( document obj -- document )
+ over insertion-mode>> tree-insert* ;
+
+MEMO: load-entities ( -- assoc )
+ "vocab:html5/entities.json" utf8 file-contents json> ;
+
+MEMO: entities-suffix-array ( -- assoc )
+ load-entities keys >suffix-array ;
+
+: lookup-entity ( string -- entity/string ? )
+ load-entities ?at ;
+
+: named-character-match? ( document -- prefix? exact? )
+ temporary-buffer>>
+ [ entities-suffix-array query f like ]
+ [ last CHAR: ; = ] bi ;
+
+ERROR: unknown-named-entity entity ;
+: take-named-character ( document -- )
+ dup
+ temporary-buffer>> >string lookup-entity [
+ "characters" of
+ SBUF" " clone-like >>temporary-buffer drop
+ ] [
+ unknown-named-entity
+ ] if ;
+
+! XXX: remove the tag>> name>> push part
+: push-tag-name ( ch document -- )
+ [ tag>> name>> push ]
+ [
+ 2drop ! tag-name>> push
+ ] 2bi ;
+: push-attribute-name ( ch document -- ) attribute-name>> push ;
+: push-attribute-value ( ch document -- ) attribute-value>> push ;
+: push-comment-token ( ch document -- ) comment-token>> push ;
+: push-all-comment-token ( string document -- ) comment-token>> push-all ;
+
+ERROR: invalid-return-state obj ;
+: check-return-state ( obj -- return-state )
+ dup word? [ invalid-return-state ] unless ;
+
+: current-attribute ( document -- attribute/f )
+ [ attribute-name>> >string f like ]
+ [ attribute-value>> >string f like ] bi
+ 2dup or [ 2array ] [ 2drop f ] if ;
+
+: push-when ( obj/f seq -- )
+ over [ push ] [ 2drop ] if ; inline
+
+: reset-attribute ( document -- )
+ SBUF" " clone >>attribute-name
+ SBUF" " clone >>attribute-value drop ;
+
+: push-attribute ( document -- )
+ [ current-attribute ]
+ [ tag>> attributes>> push-when ]
+ [ reset-attribute ] tri ;
+
+: emit-eof ( document -- )
+ "emit-eof" print
+ f tree-insert drop ;
+: emit-char ( char document -- ) drop "emit-char: " write 1string . ;
+: emit-string ( char document -- ) drop "emit-string: " write . ;
+: emit-tag ( document -- )
+ "emit-tag: " write
+ {
+ [ tag>> [ name>> >string ] [ name<< ] bi ]
+ [ push-attribute ]
+ [ tag>> . ]
+ [ dup tag>> tree-insert drop ]
+ [ f >>tag drop ]
+ } cleave ;
+: emit-end-tag ( document -- )
+ "emit-end-tag: " write
+ [ tag>> . ]
+ [ f >>tag drop ] bi ;
+: emit-comment-token ( document -- )
+ "emit-comment-token: " write
+ {
+ [ comment-token>> >string . ]
+ [ dup comment-token>> >string <comment> tree-insert drop ]
+ [ SBUF" " clone >>comment-token drop ]
+ } cleave ;
+: emit-doctype ( document -- )
+ "emit-doctype: " write dup doctype>> .
+ {
+ [ doctype>> [ >string ] change-name drop ]
+ [
+ ! XXX: handle iframe srcdoc document
+ dup { [ doctype>> name>> "html" = not ] [ parser-cannot-change-mode-flag>> not ] } 1&& [
+ t >>quirks-mode?
+ ] [
+ dup { [ iframe-srcdoc?>> not ] [ parser-cannot-change-mode-flag>> not ] } 1&& [
+ dup doctype>> limited-quirks-mode? [ t >>limited-quirks-mode? ] when
+ ] when
+ ] if
+ drop
+ ]
+ [ dup doctype>> tree-insert drop ]
+ [ f >>doctype drop ]
+ } cleave ;
+
+: reset-temporary-buffer ( document -- ) SBUF" " clone temporary-buffer<< ;
+: ch>new-temporary-buffer ( ch document -- ) [ 1sbuf ] dip temporary-buffer<< ;
+: string>new-temporary-buffer ( string document -- ) [ SBUF" " clone-like ] dip temporary-buffer<< ;
+: temporary-buffer-last ( document -- ch/f ) temporary-buffer>> ?last ;
+: push-temporary-buffer ( ch document -- ) temporary-buffer>> push ;
+: push-all-temporary-buffer ( string document -- ) temporary-buffer>> push-all ;
+
+: flush-temporary-buffer ( document -- )
+ "flush-temporary-buffer: " write
+ [ [ temporary-buffer>> ] keep [ emit-char ] curry each ]
+ [ SBUF" " clone >>temporary-buffer drop ] bi ;
+
+: emit-temporary-buffer-with ( string document -- )
+ [ temporary-buffer>> push-all ]
+ [ flush-temporary-buffer ] bi ;
+
+! check if matches open tag
+: appropriate-end-tag-token? ( document -- ? )
+ drop f ;
+
+: ascii-upper-alpha? ( ch -- ? ) [ CHAR: A CHAR: Z between? ] [ f ] if* ; inline
+: ascii-lower-alpha? ( ch -- ? ) [ CHAR: a CHAR: z between? ] [ f ] if* ; inline
+: ascii-upper-hex-digit? ( ch -- ? ) [ CHAR: A CHAR: F between? ] [ f ] if* ; inline
+: ascii-lower-hex-digit? ( ch -- ? ) [ CHAR: a CHAR: f between? ] [ f ] if* ; inline
+: ascii-hex-alpha? ( ch -- ? ) { [ ascii-upper-hex-digit? ] [ ascii-lower-hex-digit? ] } 1|| ; inline
+
+: ascii-digit? ( ch/f -- ? ) [ CHAR: 0 CHAR: 9 between? ] [ f ] if* ;
+: ascii-alpha? ( ch/f -- ? ) { [ ascii-lower-alpha? ] [ ascii-upper-alpha? ] } 1|| ;
+: ascii-alphanumeric? ( ch/f -- ? ) { [ ascii-alpha? ] [ ascii-digit? ] } 1|| ;
+: ascii-hex-digit? ( ch/f -- ? ) { [ ascii-digit? ] [ ascii-hex-alpha? ] } 1|| ;
+
+: (return-state) ( document n/f string ch/f -- document n'/f string )
+ reach [ f ] change-return-state drop check-return-state
+ execute( document n/f string ch/f -- document n'/f string ) ;
+
+: return-state ( document n/f string -- document n'/f string )
+ pick [ f ] change-return-state drop check-return-state
+ execute( document n/f string -- document n'/f string ) ;
+
+: (data-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: & = ] [ drop [ \ data-state >>return-state ] 2dip character-reference-state ] }
+ { [ dup CHAR: < = ] [ drop tag-open-state ] }
+ { [ dup CHAR: \0 = ] [ unexpected-null-character ] }
+ { [ dup f = ] [ drop pick emit-eof ] }
+ [ reach emit-char data-state ]
+ } cond ;
+
+: data-state ( document n/f string -- document n'/f string )
+ take-char (data-state) ;
+
+
+: (rcdata-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: & = ] [ drop [ \ rcdata-state >>return-state ] 2dip character-reference-state ] }
+ { [ dup CHAR: < = ] [ drop rcdata-less-than-sign-state ] }
+ { [ dup CHAR: \0 = ] [ unexpected-null-character ] }
+ { [ dup f = ] [ drop pick emit-eof ] }
+ [ reach emit-char rcdata-state ]
+ } cond ;
+
+: rcdata-state ( document n/f string -- document n'/f string )
+ take-char (rcdata-state) ;
+
+
+: (rawtext-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: < = ] [ drop rawtext-less-than-sign-state ] }
+ { [ dup CHAR: \0 = ] [ drop unexpected-null-character ] }
+ { [ dup f = ] [ drop pick emit-eof ] }
+ [ reach emit-char rawtext-state ]
+ } cond ;
+
+: rawtext-state ( document n/f string -- document n'/f string )
+ take-char (rawtext-state) ;
+
+
+: (script-data-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: < = ] [ drop script-data-less-than-sign-state ] }
+ { [ dup CHAR: \0 = ] [ drop unexpected-null-character ] }
+ { [ dup f = ] [ drop pick emit-eof ] }
+ [ reach emit-char script-data-state ]
+ } cond ;
+
+: script-data-state ( document n/f string -- document n'/f string )
+ take-char (script-data-state) ;
+
+
+: (plaintext-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: \0 = ] [ drop unexpected-null-character ] }
+ { [ dup f = ] [ drop pick emit-eof ] }
+ [ reach emit-char plaintext-state ]
+ } cond ;
+
+: plaintext-state ( document n/f string -- document n'/f string )
+ take-char (plaintext-state) ;
+
+
+: (tag-open-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup ascii-alpha? ] [ reach new-tag (tag-name-state) ] }
+ { [ dup CHAR: ! = ] [ drop markup-declaration-open-state ] }
+ { [ dup CHAR: / = ] [ drop end-tag-open-state ] }
+ { [ dup CHAR: ? = ] [ unexpected-question-mark-instead-of-tag-name ] }
+ { [ dup f = ] [ eof-before-tag-name ] }
+ [ invalid-first-character-of-tag-name ]
+ } cond ;
+
+: tag-open-state ( document n/f string -- document n'/f string )
+ take-char (tag-open-state) ;
+
+
+: (end-tag-open-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup ascii-alpha? ] [ reach new-end-tag (tag-name-state) ] }
+ { [ dup CHAR: > = ] [ missing-end-tag-name ] }
+ { [ dup f = ] [ eof-before-tag-name ] }
+ [ invalid-first-character-of-tag-name ]
+ } cond ;
+
+: end-tag-open-state ( document n/f string -- document n'/f string )
+ take-char (end-tag-open-state) ;
+
+
+: (tag-name-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup ascii-upper-alpha? ] [ 0x20 + reach push-tag-name tag-name-state ] }
+ { [ dup "\t\n\f\s" member? ] [ drop before-attribute-name-state ] }
+ { [ dup CHAR: / = ] [ drop self-closing-start-tag-state ] }
+ { [ dup CHAR: > = ] [ drop pick emit-tag data-state ] }
+ { [ dup CHAR: \0 = ] [ unexpected-null-character ] }
+ { [ dup f = ] [ eof-before-tag-name ] }
+ [ reach push-tag-name tag-name-state ]
+ } cond ;
+
+: tag-name-state ( document n/f string -- document n'/f string )
+ take-char (tag-name-state) ;
+
+
+: (rcdata-less-than-sign-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: / = ] [ drop pick reset-temporary-buffer rcdata-end-tag-open-state ] }
+ [ [ CHAR: < reach emit-char ] dip (rcdata-state) ]
+ } cond ;
+
+: rcdata-less-than-sign-state ( document n/f string -- document n'/f string )
+ take-char (rcdata-less-than-sign-state) ;
+
+
+: (rcdata-end-tag-open-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup ascii-alpha? ] [ reach new-end-tag (rcdata-end-tag-name-state) ] }
+ [ [ CHAR: < reach emit-char ] dip (rcdata-state) ]
+ } cond ;
+
+: rcdata-end-tag-open-state ( document n/f string -- document n'/f string )
+ take-char (rcdata-end-tag-open-state) ;
+
+
+: (rcdata-end-tag-name-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s" member? ] [
+ drop pick appropriate-end-tag-token?
+ [ before-attribute-name-state ] [ "</" reach emit-temporary-buffer-with rcdata-state ] if
+ ] }
+ { [ dup CHAR: / = ] [
+ drop pick appropriate-end-tag-token?
+ [ self-closing-start-tag-state ] [ "</" reach emit-temporary-buffer-with rcdata-state ] if
+ ] }
+ { [ dup CHAR: > = ] [
+ drop pick appropriate-end-tag-token?
+ [ pick emit-end-tag data-state ] [ "</" reach emit-temporary-buffer-with rcdata-state ] if
+ ] }
+ { [ dup ascii-upper-alpha? ] [ [ 0x20 + reach push-tag-name ] [ reach push-temporary-buffer ] bi rcdata-end-tag-name-state ] }
+ { [ dup ascii-lower-alpha? ] [ [ reach push-tag-name ] [ reach push-temporary-buffer ] bi rcdata-end-tag-name-state ] }
+ [ [ "</" reach emit-temporary-buffer-with ] dip (rcdata-state) ]
+ } cond ;
+
+: rcdata-end-tag-name-state ( document n/f string -- document n'/f string )
+ take-char (rcdata-end-tag-name-state) ;
+
+
+: (rawtext-less-than-sign-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: / = ] [ drop pick reset-temporary-buffer rawtext-end-tag-open-state ] }
+ [ [ CHAR: < reach emit-char ] dip (rawtext-state) ]
+ } cond ;
+
+: rawtext-less-than-sign-state ( document n/f string -- document n'/f string )
+ take-char (rawtext-less-than-sign-state) ;
+
+
+: (rawtext-end-tag-open-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup ascii-alpha? ] [ reach new-end-tag (rawtext-end-tag-name-state) ] }
+ [ [ CHAR: < reach emit-char ] dip (rawtext-state) ]
+ } cond ;
+
+: rawtext-end-tag-open-state ( document n/f string -- document n'/f string )
+ take-char (rawtext-end-tag-open-state) ;
+
+
+: (rawtext-end-tag-name-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s" member? ] [
+ drop pick appropriate-end-tag-token?
+ [ before-attribute-name-state ] [ "</" reach emit-temporary-buffer-with rawtext-state ] if
+ ] }
+ { [ dup CHAR: / = ] [
+ drop pick appropriate-end-tag-token?
+ [ self-closing-start-tag-state ] [ "</" reach emit-temporary-buffer-with rawtext-state ] if
+ ] }
+ { [ dup CHAR: > = ] [
+ drop pick appropriate-end-tag-token?
+ [ pick emit-end-tag data-state ] [ "</" reach emit-temporary-buffer-with rawtext-state ] if
+ ] }
+ { [ dup ascii-upper-alpha? ] [ [ 0x20 + reach push-tag-name ] [ reach push-temporary-buffer ] bi rawtext-end-tag-name-state ] }
+ { [ dup ascii-lower-alpha? ] [ [ reach push-tag-name ] [ reach push-temporary-buffer ] bi rawtext-end-tag-name-state ] }
+ [ [ "</" reach emit-temporary-buffer-with ] dip (rawtext-state) ]
+ } cond ;
+
+: rawtext-end-tag-name-state ( document n/f string -- document n'/f string )
+ take-char (rawtext-end-tag-name-state) ;
+
+
+: (script-data-less-than-sign-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: / = ] [ drop pick reset-temporary-buffer script-data-end-tag-open-state ] }
+ { [ dup CHAR: ! = ] [ drop "<!" reach emit-string script-data-escape-start-state ] }
+ [ [ CHAR: < reach emit-char ] dip (script-data-state) ]
+ } cond ;
+
+: script-data-less-than-sign-state ( document n/f string -- document n'/f string )
+ take-char (script-data-less-than-sign-state) ;
+
+
+: (script-data-end-tag-open-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup ascii-alpha? ] [ reach new-end-tag (script-data-end-tag-name-state) ] }
+ [ [ "</" reach emit-string ] dip (script-data-state) ]
+ } cond ;
+
+: script-data-end-tag-open-state ( document n/f string -- document n'/f string )
+ take-char (script-data-end-tag-open-state) ;
+
+
+: (script-data-end-tag-name-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s" member? ] [
+ drop pick appropriate-end-tag-token?
+ [ before-attribute-name-state ] [ "</" reach emit-temporary-buffer-with script-data-state ] if
+ ] }
+ { [ dup CHAR: / = ] [
+ drop pick appropriate-end-tag-token?
+ [ self-closing-start-tag-state ] [ "</" reach emit-temporary-buffer-with script-data-state ] if
+ ] }
+ { [ dup CHAR: > = ] [
+ drop pick appropriate-end-tag-token?
+ [ pick emit-end-tag data-state ] [ "</" reach emit-temporary-buffer-with script-data-state ] if
+ ] }
+ { [ dup ascii-upper-alpha? ] [ [ 0x20 + reach push-tag-name ] [ reach push-temporary-buffer ] bi rawtext-end-tag-name-state ] }
+ { [ dup ascii-lower-alpha? ] [ [ reach push-tag-name ] [ reach push-temporary-buffer ] bi rawtext-end-tag-name-state ] }
+ [ [ "</" reach emit-temporary-buffer-with ] dip (script-data-state) ]
+ } cond ;
+
+: script-data-end-tag-name-state ( document n/f string -- document n'/f string )
+ take-char (script-data-end-tag-name-state) ;
+
+
+: (script-data-escape-start-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: - = ] [ drop script-data-escape-start-dash-state ] }
+ [ (script-data-state) ]
+ } cond ;
+
+: script-data-escape-start-state ( document n/f string -- document n'/f string )
+ take-char (script-data-escape-start-state) ;
+
+
+: (script-data-escape-start-dash-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: - = ] [ drop script-data-escaped-dash-dash-state ] }
+ [ (script-data-state) ]
+ } cond ;
+
+: script-data-escape-start-dash-state ( document n/f string -- document n'/f string )
+ take-char (script-data-escape-start-dash-state) ;
+
+
+: (script-data-escaped-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: - = ] [ drop script-data-escaped-dash-state ] }
+ { [ dup CHAR: < = ] [ drop script-data-escaped-less-than-sign-state ] }
+ { [ dup CHAR: \0 = ] [ unexpected-null-character CHAR: replacement-character unimplemented* ] }
+ { [ dup f = ] [ eof-in-script-html-comment-like-text ] }
+ [ reach emit-char script-data-escaped-state ]
+ } cond ;
+
+: script-data-escaped-state ( document n/f string -- document n'/f string )
+ take-char (script-data-escaped-state) ;
+
+
+: (script-data-escaped-dash-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: - = ] [ drop script-data-escaped-dash-dash-state ] }
+ { [ dup CHAR: < = ] [ drop script-data-escaped-less-than-sign-state ] }
+ { [ dup CHAR: \0 = ] [ unexpected-null-character script-data-escaped-state ] }
+ { [ dup f = ] [ eof-in-script-html-comment-like-text ] }
+ [ reach emit-char script-data-escaped-state ]
+ } cond ;
+
+: script-data-escaped-dash-state ( document n/f string -- document n'/f string )
+ take-char (script-data-escaped-dash-state) ;
+
+
+: (script-data-escaped-dash-dash-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: - = ] [ reach emit-char script-data-escaped-dash-dash-state ] }
+ { [ dup CHAR: < = ] [ drop script-data-escaped-less-than-sign-state ] }
+ { [ dup CHAR: > = ] [ reach emit-char script-data-state ] }
+ { [ dup CHAR: \0 = ] [ unexpected-null-character script-data-escaped-state ] }
+ { [ dup f = ] [ eof-in-script-html-comment-like-text ] }
+ [ reach emit-char script-data-escaped-state ]
+ } cond ;
+
+: script-data-escaped-dash-dash-state ( document n/f string -- document n'/f string )
+ take-char (script-data-escaped-dash-dash-state) ;
+
+
+: (script-data-escaped-less-than-sign-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: / = ] [ drop pick reset-temporary-buffer script-data-escaped-end-tag-open-state ] }
+ { [ dup ascii-alpha? ] [ [ pick reset-temporary-buffer CHAR: < reach emit-char ] dip (script-data-double-escape-start-state) ] }
+ [ [ CHAR: < reach emit-char ] dip (script-data-escaped-state) ]
+ } cond ;
+
+: script-data-escaped-less-than-sign-state ( document n/f string -- document n'/f string )
+ take-char (script-data-escaped-less-than-sign-state) ;
+
+
+: (script-data-escaped-end-tag-open-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup ascii-alpha? ] [ [ pick new-end-tag ] dip (script-data-escaped-end-tag-name-state) ] }
+ [ [ "</" reach emit-string ] dip (script-data-escaped-state) ]
+ } cond ;
+
+: script-data-escaped-end-tag-open-state ( document n/f string -- document n'/f string )
+ take-char (script-data-escaped-end-tag-open-state) ;
+
+
+: (script-data-escaped-end-tag-name-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s" member? ] [
+ drop pick appropriate-end-tag-token?
+ [ before-attribute-name-state ] [ "</" reach emit-temporary-buffer-with script-data-escaped-state ] if
+ ] }
+ { [ dup CHAR: / = ] [
+ drop pick appropriate-end-tag-token?
+ [ self-closing-start-tag-state ] [ "</" reach emit-temporary-buffer-with script-data-escaped-state ] if
+ ] }
+ { [ dup CHAR: > = ] [
+ drop pick appropriate-end-tag-token?
+ [ pick emit-end-tag data-state ] [ "</" reach emit-temporary-buffer-with script-data-escaped-state ] if
+ ] }
+ { [ dup ascii-upper-alpha? ] [ [ 0x20 + reach push-tag-name ] [ reach push-temporary-buffer ] bi script-data-escaped-end-tag-name-state ] }
+ { [ dup ascii-lower-alpha? ] [ [ reach push-tag-name ] [ reach push-temporary-buffer ] bi script-data-escaped-end-tag-name-state ] }
+ [ [ "</" reach emit-temporary-buffer-with ] dip (script-data-escaped-state) ]
+ } cond ;
+
+: script-data-escaped-end-tag-name-state ( document n/f string -- document n'/f string )
+ take-char (script-data-escaped-end-tag-name-state) ;
+
+
+: (script-data-double-escape-start-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s/>" member? ] [
+ reach emit-char
+ pick temporary-buffer>> "script" sequence=
+ [ script-data-double-escaped-state ] [ script-data-escaped-state ] if
+ ] }
+ { [ dup ascii-upper-alpha? ] [ [ 0x20 + reach push-tag-name ] [ reach push-temporary-buffer ] bi script-data-double-escape-start-state ] }
+ { [ dup ascii-lower-alpha? ] [ [ reach push-tag-name ] [ reach push-temporary-buffer ] bi script-data-double-escape-start-state ] } ! todo
+ [ (script-data-escaped-state) ]
+ } cond ;
+
+: script-data-double-escape-start-state ( document n/f string -- document n'/f string )
+ take-char (script-data-double-escape-start-state) ;
+
+
+: (script-data-double-escaped-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: - = ] [ reach emit-char script-data-double-escaped-dash-state ] }
+ { [ dup CHAR: < = ] [ reach emit-char script-data-double-escaped-less-than-sign-state ] }
+ { [ dup CHAR: \0 = ] [
+ unexpected-null-character
+ CHAR: replacement-character reach emit-char
+ script-data-double-escaped-state
+ ] }
+ { [ dup f = ] [ eof-in-script-html-comment-like-text ] }
+ [ reach emit-char script-data-double-escaped-state ]
+ } cond ;
+
+: script-data-double-escaped-state ( document n/f string -- document n'/f string )
+ take-char (script-data-double-escaped-state) ;
+
+
+: (script-data-double-escaped-dash-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: - = ] [ reach emit-char script-data-double-escaped-dash-dash-state ] }
+ { [ dup CHAR: < = ] [ reach emit-char script-data-double-escaped-less-than-sign-state ] }
+ { [ dup CHAR: \0 = ] [
+ unexpected-null-character
+ CHAR: replacement-character reach emit-char
+ script-data-double-escaped-state
+ ] }
+ { [ dup f = ] [ eof-in-script-html-comment-like-text ] }
+ [ reach emit-char script-data-double-escaped-state ]
+ } cond ;
+
+: script-data-double-escaped-dash-state ( document n/f string -- document n'/f string )
+ take-char (script-data-double-escaped-dash-state) ;
+
+
+: (script-data-double-escaped-dash-dash-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: - = ] [ reach emit-char script-data-double-escaped-dash-dash-state ] }
+ { [ dup CHAR: < = ] [ reach emit-char script-data-double-escaped-less-than-sign-state ] }
+ { [ dup CHAR: > = ] [ reach emit-char script-data-state ] }
+ { [ dup CHAR: \0 = ] [
+ unexpected-null-character
+ CHAR: replacement-character reach emit-char
+ script-data-double-escaped-state
+ ] }
+ { [ dup f = ] [ eof-in-script-html-comment-like-text ] }
+ [ reach emit-char script-data-escaped-state ]
+ } cond ;
+
+: script-data-double-escaped-dash-dash-state ( document n/f string -- document n'/f string )
+ take-char (script-data-double-escaped-dash-dash-state) ;
+
+
+: (script-data-double-escaped-less-than-sign-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: / = ] [ reach emit-char pick reset-temporary-buffer script-data-double-escape-end-state ] }
+ [ (script-data-double-escaped-state) ]
+ } cond ;
+
+: script-data-double-escaped-less-than-sign-state ( document n/f string -- document n'/f string )
+ take-char (script-data-double-escaped-less-than-sign-state) ;
+
+
+: (script-data-double-escape-end-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s/>" member? ] [
+ reach emit-char
+ pick temporary-buffer>> "script" sequence=
+ [ script-data-escaped-state ] [ script-data-double-escaped-state ] if
+ ] }
+ { [ dup ascii-upper-alpha? ] [ [ 0x20 + reach push-tag-name ] [ reach push-temporary-buffer ] bi script-data-double-escape-end-state ] }
+ { [ dup ascii-lower-alpha? ] [ [ reach push-tag-name ] [ reach push-temporary-buffer ] bi script-data-double-escape-end-state ] } ! todo
+ [ (script-data-double-escaped-state) ]
+ } cond ;
+
+: script-data-double-escape-end-state ( document n/f string -- document n'/f string )
+ take-char (script-data-double-escape-end-state) ;
+
+
+: (before-attribute-name-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s" member? ] [ drop before-attribute-name-state ] }
+ { [ dup "/>" member? ] [ (after-attribute-name-state) ] }
+ { [ dup f = ] [ (after-attribute-name-state) ] }
+ { [ dup CHAR: = = ] [ unexpected-equals-sign-before-attribute-name ] }
+ [ reach push-attribute (attribute-name-state) ]
+ } cond ;
+
+: before-attribute-name-state ( document n/f string -- document n'/f string )
+ take-char (before-attribute-name-state) ;
+
+
+: (attribute-name-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s/>" member? ] [ (after-attribute-name-state) ] }
+ { [ dup f = ] [ (after-attribute-name-state) ] }
+ { [ dup CHAR: = = ] [ drop before-attribute-value-state ] }
+ { [ dup ascii-upper-alpha? ] [
+ 0x20 + reach push-attribute-name
+ attribute-name-state
+ ] }
+ { [ dup CHAR: \0 = ] [ unexpected-null-character ] }
+ { [ dup "\"'<" member? ] [
+ unexpected-character-in-attribute-name
+ reach push-attribute-name attribute-name-state
+ ] }
+ [ reach push-attribute-name attribute-name-state ]
+ } cond ;
+
+: attribute-name-state ( document n/f string -- document n'/f string )
+ take-char (attribute-name-state) ;
+
+
+: (after-attribute-name-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s" member? ] [ drop after-attribute-name-state ] }
+ { [ dup CHAR: / = ] [ drop self-closing-start-tag-state ] }
+ { [ dup CHAR: = = ] [ drop before-attribute-value-state ] }
+ { [ dup CHAR: > = ] [ drop pick emit-tag data-state ] }
+ { [ dup f = ] [ eof-in-tag ] }
+ [ [ pick push-attribute ] dip (attribute-name-state) ]
+ } cond ;
+
+: after-attribute-name-state ( document n/f string -- document n'/f string )
+ take-char (after-attribute-name-state) ;
+
+
+: (before-attribute-value-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s" member? ] [ drop before-attribute-name-state ] }
+ { [ dup CHAR: " = ] [ drop attribute-value-double-quoted-state ] }
+ { [ dup CHAR: ' = ] [ drop attribute-value-single-quoted-state ] }
+ { [ dup CHAR: > = ] [ drop missing-attribute-value ] }
+ [ (attribute-value-unquoted-state) ]
+ } cond ;
+
+: before-attribute-value-state ( document n/f string -- document n'/f string )
+ take-char (before-attribute-value-state) ;
+
+
+: (attribute-value-double-quoted-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: " = ] [ drop after-attribute-value-quoted-state ] }
+ { [ dup CHAR: & = ] [
+ drop
+ [ \ attribute-value-double-quoted-state >>return-state ] 2dip character-reference-state
+ ] }
+ { [ dup CHAR: \0 = ] [ unexpected-null-character ] }
+ { [ dup f = ] [ eof-in-tag ] }
+ [ reach push-attribute-value attribute-value-double-quoted-state ]
+ } cond ;
+
+: attribute-value-double-quoted-state ( document n/f string -- document n'/f string )
+ take-char (attribute-value-double-quoted-state) ;
+
+
+: (attribute-value-single-quoted-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: ' = ] [ drop after-attribute-value-quoted-state ] }
+ { [ dup CHAR: & = ] [
+ drop [ \ attribute-value-single-quoted-state >>return-state ] 2dip
+ character-reference-state
+ ] }
+ { [ dup CHAR: \0 = ] [
+ drop unexpected-null-character
+ CHAR: replacement-character reach push-attribute-value
+ ] }
+ { [ dup f = ] [ eof-in-tag ] }
+ [ reach push-attribute-value attribute-value-single-quoted-state ]
+ } cond ;
+
+: attribute-value-single-quoted-state ( document n/f string -- document n'/f string )
+ take-char (attribute-value-single-quoted-state) ;
+
+
+: (attribute-value-unquoted-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s" member? ] [ drop before-attribute-name-state ] }
+ { [ dup CHAR: & = ] [
+ drop
+ [ \ attribute-value-unquoted-state >>return-state ] 2dip character-reference-state
+ ] }
+ { [ dup CHAR: > = ] [ drop pick emit-tag data-state ] }
+ { [ dup CHAR: \0 = ] [ drop unexpected-null-character CHAR: replacement-character reach push-attribute-value ] }
+ { [ dup "\"'<=`" member? ] [
+ unexpected-character-in-unquoted-attribute-value
+ reach push-attribute-value
+ attribute-value-unquoted-state
+ ] }
+ { [ dup f = ] [ eof-in-tag ] }
+ [ reach push-attribute-value attribute-value-unquoted-state ]
+ } cond ;
+
+: attribute-value-unquoted-state ( document n/f string -- document n'/f string )
+ take-char (attribute-value-unquoted-state) ;
+
+
+: (after-attribute-value-quoted-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s" member? ] [ drop before-attribute-name-state ] }
+ { [ dup CHAR: / = ] [ drop self-closing-start-tag-state ] }
+ { [ dup CHAR: > = ] [ drop pick emit-tag data-state ] }
+ { [ dup f = ] [ eof-in-tag ] }
+ [ missing-whitespace-between-attributes (before-attribute-name-state) ]
+ } cond ;
+
+: after-attribute-value-quoted-state ( document n/f string -- document n'/f string )
+ take-char (after-attribute-value-quoted-state) ;
+
+
+: (self-closing-start-tag-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: > = ] [ drop pick [ set-self-closing ] [ emit-tag ] bi data-state ] }
+ { [ dup f = ] [ eof-in-tag ] }
+ [ unexpected-solidus-in-tag ]
+ } cond ;
+
+: self-closing-start-tag-state ( document n/f string -- document n'/f string )
+ take-char (self-closing-start-tag-state) ;
+
+
+: (bogus-comment-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: > = ] [ drop pick emit-comment-token data-state ] }
+ { [ dup f = ] [ drop pick [ emit-comment-token ] [ emit-eof ] bi ] }
+ { [ dup CHAR: \0 = ] [ drop unexpected-null-character CHAR: replacement-character reach push-comment-token ] }
+ [ reach push-comment-token bogus-comment-state ]
+ } cond ;
+
+: bogus-comment-state ( document n/f string -- document n'/f string )
+ take-char (bogus-comment-state) ;
+
+
+: markup-declaration-open-state ( document n/f string -- document n'/f string )
+ {
+ { [ "--" take-from? ] [ comment-start-state ] }
+ { [ "DOCTYPE" take-from-insensitive? ] [ doctype-state ] }
+ { [ "[CDATA[" take-from-insensitive? ] [ unimplemented* ] }
+ [
+ incorrectly-opened-comment ! bogus-comment-state
+ ]
+ } cond ;
+
+: (comment-start-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: - = ] [ drop comment-start-dash-state ] }
+ { [ dup CHAR: > = ] [ drop abrupt-closing-of-empty-comment pick emit-comment-token data-state ] }
+ [ (comment-state) ]
+ } cond ;
+
+: comment-start-state ( document n/f string -- document n'/f string )
+ take-char (comment-start-state) ;
+
+
+: (comment-start-dash-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: - = ] [ drop comment-end-state ] }
+ { [ dup CHAR: > = ] [ drop abrupt-closing-of-empty-comment ] }
+ { [ dup f = ] [ eof-in-comment ] }
+ [ [ CHAR: - reach push-comment-token ] dip (comment-state) ]
+ } cond ;
+
+: comment-start-dash-state ( document n/f string -- document n'/f string )
+ take-char (comment-start-dash-state) ;
+
+
+: (comment-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: < = ] [ reach push-comment-token comment-less-than-sign-state ] }
+ { [ dup CHAR: - = ] [ drop comment-end-dash-state ] }
+ { [ dup CHAR: \0 = ] [ drop unexpected-null-character ] }
+ { [ dup f = ] [ eof-in-comment ] }
+ [ reach push-comment-token comment-state ]
+ } cond ;
+
+: comment-state ( document n/f string -- document n'/f string )
+ take-char (comment-state) ;
+
+
+: (comment-less-than-sign-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: ! = ] [ reach push-comment-token comment-less-than-sign-bang-state ] }
+ { [ dup CHAR: < = ] [ reach push-comment-token comment-less-than-sign-state ] }
+ [ (comment-state) ]
+ } cond ;
+
+: comment-less-than-sign-state ( document n/f string -- document n'/f string )
+ take-char (comment-less-than-sign-state) ;
+
+
+: (comment-less-than-sign-bang-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: - = ] [ reach push-comment-token comment-less-than-sign-bang-dash-state ] }
+ [ (comment-state) ]
+ } cond ;
+
+: comment-less-than-sign-bang-state ( document n/f string -- document n'/f string )
+ take-char (comment-less-than-sign-bang-state) ;
+
+
+: (comment-less-than-sign-bang-dash-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: - = ] [ drop comment-less-than-sign-bang-dash-dash-state ] }
+ [ (comment-end-dash-state) ]
+ } cond ;
+
+: comment-less-than-sign-bang-dash-state ( document n/f string -- document n'/f string )
+ take-char (comment-less-than-sign-bang-dash-state) ;
+
+
+: (comment-less-than-sign-bang-dash-dash-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: > = ] [ (comment-end-state) ] }
+ { [ dup f = ] [ (comment-end-state) ] }
+ [ nested-comment (comment-end-state) ]
+ } cond ;
+
+: comment-less-than-sign-bang-dash-dash-state ( document n/f string -- document n'/f string )
+ take-char (comment-less-than-sign-bang-dash-dash-state) ;
+
+
+: (comment-end-dash-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: - = ] [ drop comment-end-state ] }
+ { [ dup f = ] [ eof-in-comment ] }
+ [ [ CHAR: - reach push-comment-token ] dip (comment-state) ]
+ } cond ;
+
+: comment-end-dash-state ( document n/f string -- document n'/f string )
+ take-char (comment-end-dash-state) ;
+
+
+: (comment-end-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: > = ] [ drop pick emit-comment-token data-state ] }
+ { [ dup CHAR: ! = ] [ drop comment-end-bang-state ] }
+ { [ dup CHAR: - = ] [ reach push-comment-token comment-end-state ] }
+ { [ dup f = ] [ drop eof-in-comment pick [ emit-comment-token ] [ emit-eof ] bi ] }
+ [ [ "--" reach push-all-comment-token ] dip (comment-state) ]
+ } cond ;
+
+: comment-end-state ( document n/f string -- document n'/f string )
+ take-char (comment-end-state) ;
+
+
+: (comment-end-bang-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: - = ] [ drop comment-end-dash-state ] }
+ { [ dup CHAR: > = ] [ drop incorrectly-closed-comment pick emit-comment-token data-state ] }
+ { [ dup f = ] [ eof-in-comment ] }
+ [ [ "--!" reach push-all-comment-token ] dip (comment-state) ]
+ } cond ;
+
+: comment-end-bang-state ( document n/f string -- document n'/f string )
+ take-char (comment-end-bang-state) ;
+
+
+: (doctype-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s" member? ] [ drop before-doctype-name-state ] }
+ { [ dup CHAR: > = ] [ (before-doctype-name-state) ] }
+ { [ dup f = ] [ drop eof-in-doctype pick [ new-doctype-with-quirks ] [ emit-doctype ] [ emit-eof ] tri ] }
+ [ missing-whitespace-before-doctype-name ]
+ } cond ;
+
+: doctype-state ( document n/f string -- document n'/f string )
+ take-char (doctype-state) ;
+
+
+: (before-doctype-name-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s" member? ] [ drop before-doctype-name-state ] }
+ { [ dup ascii-upper-alpha? ] [ 0x20 + reach new-doctype-from-ch doctype-name-state ] }
+ { [ dup CHAR: \0 = ] [
+ drop
+ unexpected-null-character
+ CHAR: replacement-character reach new-doctype-from-ch
+ doctype-name-state
+ ] }
+ { [ dup CHAR: > = ] [
+ drop missing-doctype-name
+ pick [ new-doctype-with-quirks ] [ emit-doctype ] bi
+ ] }
+ { [ dup f = ] [
+ drop eof-in-doctype
+ pick [ new-doctype-with-quirks ] [ emit-doctype ] [ emit-eof ] tri
+ ] }
+ [ reach new-doctype-from-ch doctype-name-state ]
+ } cond ;
+
+: before-doctype-name-state ( document n/f string -- document n'/f string )
+ take-char (before-doctype-name-state) ;
+
+
+: (doctype-name-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s" member? ] [ drop after-doctype-name-state ] }
+ { [ dup CHAR: > = ] [ drop pick emit-doctype data-state ] }
+ { [ dup ascii-upper-alpha? ] [ 0x20 + reach push-doctype-name doctype-name-state ] }
+ { [ dup CHAR: \0 = ] [
+ drop unexpected-null-character
+ CHAR: replacement-character pick push-doctype-name
+ doctype-name-state
+ ] }
+ { [ dup f = ] [ drop eof-in-doctype pick [ emit-doctype ] [ emit-eof ] bi ] } ! force-quirks on for doctype
+ [ reach push-doctype-name doctype-name-state ]
+ } cond ;
+
+: doctype-name-state ( document n/f string -- document n'/f string )
+ take-char (doctype-name-state) ;
+
+
+: (after-doctype-name-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s" member? ] [ drop after-doctype-name-state ] }
+ { [ dup CHAR: > = ] [ drop pick emit-doctype data-state ] }
+ { [ dup f = ] [ eof-in-doctype ] }
+ { [ [ "PUBLIC" take-from-insensitive? ] dip swap ] [ drop after-doctype-public-keyword-state ] }
+ { [ [ "SYSTEM" take-from-insensitive? ] dip swap ] [ drop after-doctype-system-keyword-state ] }
+ [ invalid-character-sequence-after-doctype-name ]
+ } cond ;
+
+: after-doctype-name-state ( document n/f string -- document n'/f string )
+ take-char (after-doctype-name-state) ;
+
+
+: (after-doctype-public-keyword-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s" member? ] [ drop before-doctype-public-identifier-state ] }
+ { [ dup CHAR: " = ] [ missing-whitespace-after-doctype-public-keyword ] }
+ { [ dup CHAR: ' = ] [ missing-whitespace-after-doctype-public-keyword ] }
+ { [ dup CHAR: > = ] [ drop missing-doctype-public-identifier force-quirks data-state ] }
+ { [ dup f = ] [ drop eof-in-doctype pick [ emit-doctype ] [ emit-eof ] bi ] }
+ [
+ missing-quote-before-doctype-public-identifier
+ [ reach force-quirks ] dip
+ (bogus-doctype-state)
+ ]
+ } cond ;
+
+: after-doctype-public-keyword-state ( document n/f string -- document n'/f string )
+ take-char (after-doctype-public-keyword-state) ;
+
+
+: (before-doctype-public-identifier-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s" member? ] [ drop before-doctype-public-identifier-state ] }
+ { [ dup CHAR: " = ] [
+ drop pick initialize-doctype-public-identifier
+ doctype-public-identifier-double-quoted-state
+ ] }
+ { [ dup CHAR: ' = ] [
+ drop pick initialize-doctype-public-identifier
+ doctype-public-identifier-single-quoted-state
+ ] }
+ { [ dup CHAR: > = ] [
+ drop missing-doctype-public-identifier
+ pick [ force-quirks ] [ emit-doctype ] bi
+ data-state
+ ] }
+ { [ dup f = ] [ drop eof-in-doctype pick [ emit-doctype ] [ emit-eof ] bi ] }
+ [
+ missing-quote-before-doctype-public-identifier
+ [ reach force-quirks ] dip
+ (bogus-doctype-state)
+ ]
+ } cond ;
+
+: before-doctype-public-identifier-state ( document n/f string -- document n'/f string )
+ take-char (before-doctype-public-identifier-state) ;
+
+
+: (doctype-public-identifier-double-quoted-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: " = ] [ drop after-doctype-public-identifier-state ] }
+ { [ dup CHAR: \0 = ] [
+ drop
+ unexpected-null-character
+ CHAR: replacement-character pick push-doctype-public-identifier
+ doctype-public-identifier-double-quoted-state
+ ] }
+ { [ dup CHAR: > = ] [
+ drop abrupt-doctype-public-identifier
+ pick [ force-quirks ] [ emit-doctype ] bi
+ data-state
+ ] }
+ { [ dup f = ] [
+ drop eof-in-doctype
+ pick [ force-quirks ] [ emit-doctype ] [ emit-eof ] tri
+ ] }
+ [ reach push-doctype-public-identifier doctype-public-identifier-double-quoted-state ]
+ } cond ;
+
+: doctype-public-identifier-double-quoted-state ( document n/f string -- document n'/f string )
+ take-char (doctype-public-identifier-double-quoted-state) ;
+
+
+: (doctype-public-identifier-single-quoted-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: ' = ] [ drop after-doctype-public-identifier-state ] }
+ { [ dup CHAR: \0 = ] [
+ drop
+ unexpected-null-character
+ CHAR: replacement-character pick push-doctype-public-identifier
+ doctype-public-identifier-double-quoted-state
+ ] }
+ { [ dup CHAR: > = ] [
+ drop abrupt-doctype-public-identifier
+ pick [ force-quirks ] [ emit-doctype ] bi
+ data-state
+ ] }
+ { [ dup f = ] [
+ drop eof-in-doctype
+ pick [ force-quirks ] [ emit-doctype ] [ emit-eof ] tri
+ ] }
+ [ reach push-doctype-public-identifier doctype-public-identifier-single-quoted-state ]
+ } cond ;
+
+: doctype-public-identifier-single-quoted-state ( document n/f string -- document n'/f string )
+ take-char (doctype-public-identifier-single-quoted-state) ;
+
+
+: (after-doctype-public-identifier-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s" member? ] [ drop between-doctype-public-and-system-identifiers-state ] }
+ { [ dup CHAR: > = ] [
+ drop pick emit-doctype
+ data-state
+ ] }
+ { [ dup CHAR: " = ] [
+ drop missing-whitespace-between-doctype-public-and-system-identifiers
+ pick initialize-doctype-system-identifier
+ doctype-system-identifier-double-quoted-state
+ ] }
+ { [ dup CHAR: ' = ] [
+ drop missing-whitespace-between-doctype-public-and-system-identifiers
+ pick initialize-doctype-system-identifier
+ doctype-system-identifier-single-quoted-state
+ ] }
+ { [ dup f = ] [ drop eof-in-doctype pick [ force-quirks ] [ emit-doctype ] [ emit-eof ] tri ] }
+ [
+ missing-quote-before-doctype-system-identifier
+ [ reach force-quirks ] dip
+ (bogus-doctype-state)
+ ]
+ } cond ;
+
+: after-doctype-public-identifier-state ( document n/f string -- document n'/f string )
+ take-char (after-doctype-public-identifier-state) ;
+
+
+: (between-doctype-public-and-system-identifiers-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s" member? ] [ drop between-doctype-public-and-system-identifiers-state ] }
+ { [ dup CHAR: > = ] [
+ drop pick emit-doctype
+ data-state
+ ] }
+ { [ dup CHAR: " = ] [
+ drop pick initialize-doctype-system-identifier
+ doctype-system-identifier-double-quoted-state
+ ] }
+ { [ dup CHAR: ' = ] [
+ drop pick initialize-doctype-system-identifier
+ doctype-system-identifier-single-quoted-state
+ ] }
+ { [ dup f = ] [ drop eof-in-doctype pick [ force-quirks ] [ emit-doctype ] [ emit-eof ] tri ] }
+ [
+ missing-quote-before-doctype-system-identifier
+ [ reach force-quirks ] dip
+ (bogus-doctype-state)
+ ]
+ } cond ;
+
+: between-doctype-public-and-system-identifiers-state ( document n/f string -- document n'/f string )
+ take-char (between-doctype-public-and-system-identifiers-state) ;
+
+
+: (after-doctype-system-keyword-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s" member? ] [ drop between-doctype-public-and-system-identifiers-state ] }
+ { [ dup CHAR: " = ] [
+ drop missing-whitespace-after-doctype-system-keyword
+ pick initialize-doctype-system-identifier
+ doctype-system-identifier-double-quoted-state
+ ] }
+ { [ dup CHAR: ' = ] [
+ drop missing-whitespace-after-doctype-system-keyword
+ pick initialize-doctype-system-identifier
+ doctype-system-identifier-single-quoted-state
+ ] }
+ { [ dup CHAR: > = ] [
+ drop missing-doctype-system-identifier
+ pick [ force-quirks ] [ emit-doctype ] bi
+ data-state
+ ] }
+ { [ dup f = ] [ drop eof-in-doctype pick [ force-quirks ] [ emit-doctype ] [ emit-eof ] tri ] }
+ [
+ missing-quote-before-doctype-system-identifier
+ [ reach force-quirks ] dip
+ (bogus-doctype-state)
+ ]
+ } cond ;
+
+: after-doctype-system-keyword-state ( document n/f string -- document n'/f string )
+ take-char (after-doctype-system-keyword-state) ;
+
+
+: (before-doctype-system-identifier-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s" member? ] [ drop before-doctype-system-identifier-state ] }
+ { [ dup CHAR: " = ] [
+ drop pick initialize-doctype-system-identifier
+ doctype-system-identifier-double-quoted-state
+ ] }
+ { [ dup CHAR: ' = ] [
+ drop pick initialize-doctype-system-identifier
+ doctype-system-identifier-single-quoted-state
+ ] }
+ { [ dup CHAR: > = ] [
+ drop missing-doctype-system-identifier
+ pick [ force-quirks ] [ emit-doctype ] bi
+ data-state
+ ] }
+ { [ dup f = ] [ drop eof-in-doctype pick [ emit-doctype ] [ emit-eof ] bi ] }
+ [
+ missing-quote-before-doctype-system-identifier
+ [ reach force-quirks ] dip
+ (bogus-doctype-state)
+ ]
+ } cond ;
+
+: before-doctype-system-identifier-state ( document n/f string -- document n'/f string )
+ take-char (before-doctype-system-identifier-state) ;
+
+
+: (doctype-system-identifier-double-quoted-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: " = ] [ drop after-doctype-system-identifier-state ] }
+ { [ dup CHAR: \0 = ] [
+ drop
+ unexpected-null-character
+ CHAR: replacement-character pick push-doctype-system-identifier
+ doctype-system-identifier-double-quoted-state
+ ] }
+ { [ dup CHAR: > = ] [
+ drop abrupt-doctype-system-identifier
+ pick [ force-quirks ] [ emit-doctype ] bi
+ data-state
+ ] }
+ { [ dup f = ] [
+ drop eof-in-doctype
+ pick [ force-quirks ] [ emit-doctype ] [ emit-eof ] tri
+ ] }
+ [ reach push-doctype-system-identifier doctype-system-identifier-double-quoted-state ]
+ } cond ;
+
+: doctype-system-identifier-double-quoted-state ( document n/f string -- document n'/f string )
+ take-char (doctype-system-identifier-double-quoted-state) ;
+
+
+: (doctype-system-identifier-single-quoted-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: ' = ] [ drop after-doctype-system-identifier-state ] }
+ { [ dup CHAR: \0 = ] [
+ drop
+ unexpected-null-character
+ CHAR: replacement-character pick push-doctype-system-identifier
+ doctype-system-identifier-double-quoted-state
+ ] }
+ { [ dup CHAR: > = ] [
+ drop abrupt-doctype-system-identifier
+ pick [ force-quirks ] [ emit-doctype ] bi
+ data-state
+ ] }
+ { [ dup f = ] [
+ drop eof-in-doctype
+ pick [ force-quirks ] [ emit-doctype ] [ emit-eof ] tri
+ ] }
+ [ reach push-doctype-system-identifier doctype-system-identifier-single-quoted-state ]
+ } cond ;
+
+: doctype-system-identifier-single-quoted-state ( document n/f string -- document n'/f string )
+ take-char (doctype-system-identifier-single-quoted-state) ;
+
+
+: (after-doctype-system-identifier-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "\t\n\f\s" member? ] [ drop after-doctype-system-identifier-state ] }
+ { [ dup CHAR: > = ] [
+ drop pick emit-doctype
+ data-state
+ ] }
+ { [ dup f = ] [ drop eof-in-doctype pick [ force-quirks ] [ emit-doctype ] [ emit-eof ] tri ] }
+ [
+ unexpected-character-after-doctype-system-identifier
+ [ reach force-quirks ] dip
+ (bogus-doctype-state)
+ ]
+ } cond ;
+
+: after-doctype-system-identifier-state ( document n/f string -- document n'/f string )
+ take-char (after-doctype-system-identifier-state) ;
+
+
+: (bogus-doctype-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: > = ] [ drop pick emit-doctype data-state ] }
+ { [ dup CHAR: \0 = ] [ drop unexpected-null-character bogus-doctype-state ] }
+ { [ dup f = ] [ drop eof-in-doctype pick emit-eof ] }
+ [ drop bogus-doctype-state ]
+ } cond ;
+
+: bogus-doctype-state ( document n/f string -- document n'/f string )
+ take-char (bogus-doctype-state) ;
+
+
+: (cdata-section-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: ] = ] [ drop cdata-section-bracket-state ] }
+ { [ dup f = ] [ drop eof-in-cdata pick emit-eof ] }
+ [ reach emit-char cdata-section-state ]
+ } cond ;
+
+: cdata-section-state ( document n/f string -- document n'/f string )
+ take-char (cdata-section-state) ;
+
+
+: (cdata-section-bracket-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: ] = ] [ drop cdata-section-end-state ] }
+ [ [ CHAR: ] reach emit-char ] dip (cdata-section-state) ]
+ } cond ;
+
+: cdata-section-bracket-state ( document n/f string -- document n'/f string )
+ take-char (cdata-section-bracket-state) ;
+
+
+: (cdata-section-end-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup CHAR: ] = ] [ reach emit-char cdata-section-end-state ] }
+ { [ dup CHAR: > = ] [ drop data-state ] }
+ [ [ "]]" reach emit-string ] dip (cdata-section-state) ]
+ } cond ;
+
+: cdata-section-end-state ( document n/f string -- document n'/f string )
+ take-char (cdata-section-end-state) ;
+
+
+: (character-reference-state) ( document n/f string ch/f -- document n'/f string )
+ [ CHAR: & reach ch>new-temporary-buffer ] dip
+ {
+ { [ dup ascii-alphanumeric? ] [ (named-character-reference-state) ] }
+ { [ dup CHAR: # = ] [ reach push-temporary-buffer numeric-character-reference-state ] }
+ [ reach flush-temporary-buffer (return-state) ]
+ } cond ;
+
+: character-reference-state ( document n/f string -- document n'/f string )
+ take-char (character-reference-state) ;
+
+
+: (named-character-reference-state) ( document n/f string ch/f -- document n'/f string )
+ reach push-temporary-buffer
+ pick named-character-match?
+ [
+ drop ! exact match, drop prefix match
+ ! XXX: check me
+ {
+ [ pick temporary-buffer-attribute? ]
+ [ pick temporary-buffer>> ?last CHAR: ; = not ]
+ [ 3dup peek-from { [ CHAR: = = ] [ ascii-alphanumeric? ] } 1|| ]
+ } 0&& [
+ unimplemented*
+ flush-temporary-buffer
+ return-state
+ ] [
+ pick [ take-named-character ] [ flush-temporary-buffer ] bi return-state
+ ] if
+ ] [
+ ! prefix match?
+ [ named-character-reference-state ]
+ [ pick flush-temporary-buffer ambiguous-ampersand-state ] if
+ ] if ;
+
+: named-character-reference-state ( document n/f string -- document n'/f string )
+ take-char (named-character-reference-state) ;
+
+
+: (ambiguous-ampersand-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup ascii-alphanumeric? ] [
+ unimplemented*
+ ] }
+ { [ dup CHAR: ; = ] [ unknown-named-character-reference (return-state) ] }
+ [ (return-state) ]
+ } cond ;
+
+: ambiguous-ampersand-state ( document n/f string -- document n'/f string )
+ take-char (ambiguous-ampersand-state) ;
+
+
+: (numeric-character-reference-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup "xX" member? ] [ reach push-temporary-buffer hexadecimal-character-reference-start-state ] }
+ [ (decimal-character-reference-start-state) ]
+ } cond ;
+
+: numeric-character-reference-state ( document n/f string -- document n'/f string )
+ take-char (numeric-character-reference-state) ;
+
+
+: (hexadecimal-character-reference-start-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup ascii-hex-digit? ] [ (hexadecimal-character-reference-state) ] }
+ [ absence-of-digits-in-numeric-character-reference reach flush-temporary-buffer (return-state) ]
+ } cond ;
+
+: hexadecimal-character-reference-start-state ( document n/f string -- document n'/f string )
+ take-char (hexadecimal-character-reference-start-state) ;
+
+
+: (decimal-character-reference-start-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup ascii-digit? ] [ (decimal-character-reference-state) ] }
+ [ absence-of-digits-in-numeric-character-reference reach flush-temporary-buffer (return-state) ]
+ } cond ;
+
+: decimal-character-reference-start-state ( document n/f string -- document n'/f string )
+ take-char (decimal-character-reference-start-state) ;
+
+
+: (hexadecimal-character-reference-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup ascii-digit? ] [ unimplemented* ] }
+ { [ dup ascii-upper-hex-digit? ] [ unimplemented* ] }
+ { [ dup ascii-lower-hex-digit? ] [ unimplemented* ] }
+ { [ dup CHAR: ; = ] [ drop numeric-character-reference-end-state ] }
+ [ missing-semicolon-after-character-reference ]
+ } cond ;
+
+: hexadecimal-character-reference-state ( document n/f string -- document n'/f string )
+ take-char (hexadecimal-character-reference-state) ;
+
+
+: (decimal-character-reference-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ { [ dup ascii-digit? ] [ unimplemented* ] }
+ { [ dup CHAR: ; = ] [ drop numeric-character-reference-end-state ] }
+ [ missing-semicolon-after-character-reference ]
+ } cond ;
+
+: decimal-character-reference-state ( document n/f string -- document n'/f string )
+ take-char (decimal-character-reference-state) ;
+
+
+: (numeric-character-reference-end-state) ( document n/f string ch/f -- document n'/f string )
+ {
+ [ missing-semicolon-after-character-reference ]
+ } cond ;
+
+: numeric-character-reference-end-state ( document n/f string -- document n'/f string )
+ take-char (numeric-character-reference-end-state) ;
+
+
+
+: parse-html5 ( string -- document )
+ [ <document> 0 ] dip data-state 2drop ;
\ No newline at end of file