1 | (function (global, factory) {
|
2 | typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
3 | typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
4 | (factory((global.HTML5Tokenizer = {})));
|
5 | }(this, (function (exports) { 'use strict';
|
6 |
|
7 | /**
|
8 | * generated from https://raw.githubusercontent.com/w3c/html/26b5126f96f736f796b9e29718138919dd513744/entities.json
|
9 | * do not edit
|
10 | */
|
11 | var namedCharRefs = {
|
12 | Aacute: "Á", aacute: "á", Abreve: "Ă", abreve: "ă", ac: "∾", acd: "∿", acE: "∾̳", Acirc: "Â", acirc: "â", acute: "´", Acy: "А", acy: "а", AElig: "Æ", aelig: "æ", af: "\u2061", Afr: "𝔄", afr: "𝔞", Agrave: "À", agrave: "à", alefsym: "ℵ", aleph: "ℵ", Alpha: "Α", alpha: "α", Amacr: "Ā", amacr: "ā", amalg: "⨿", amp: "&", AMP: "&", andand: "⩕", And: "⩓", and: "∧", andd: "⩜", andslope: "⩘", andv: "⩚", ang: "∠", ange: "⦤", angle: "∠", angmsdaa: "⦨", angmsdab: "⦩", angmsdac: "⦪", angmsdad: "⦫", angmsdae: "⦬", angmsdaf: "⦭", angmsdag: "⦮", angmsdah: "⦯", angmsd: "∡", angrt: "∟", angrtvb: "⊾", angrtvbd: "⦝", angsph: "∢", angst: "Å", angzarr: "⍼", Aogon: "Ą", aogon: "ą", Aopf: "𝔸", aopf: "𝕒", apacir: "⩯", ap: "≈", apE: "⩰", ape: "≊", apid: "≋", apos: "'", ApplyFunction: "\u2061", approx: "≈", approxeq: "≊", Aring: "Å", aring: "å", Ascr: "𝒜", ascr: "𝒶", Assign: "≔", ast: "*", asymp: "≈", asympeq: "≍", Atilde: "Ã", atilde: "ã", Auml: "Ä", auml: "ä", awconint: "∳", awint: "⨑", backcong: "≌", backepsilon: "϶", backprime: "‵", backsim: "∽", backsimeq: "⋍", Backslash: "∖", Barv: "⫧", barvee: "⊽", barwed: "⌅", Barwed: "⌆", barwedge: "⌅", bbrk: "⎵", bbrktbrk: "⎶", bcong: "≌", Bcy: "Б", bcy: "б", bdquo: "„", becaus: "∵", because: "∵", Because: "∵", bemptyv: "⦰", bepsi: "϶", bernou: "ℬ", Bernoullis: "ℬ", Beta: "Β", beta: "β", beth: "ℶ", between: "≬", Bfr: "𝔅", bfr: "𝔟", bigcap: "⋂", bigcirc: "◯", bigcup: "⋃", bigodot: "⨀", bigoplus: "⨁", bigotimes: "⨂", bigsqcup: "⨆", bigstar: "★", bigtriangledown: "▽", bigtriangleup: "△", biguplus: "⨄", bigvee: "⋁", bigwedge: "⋀", bkarow: "⤍", blacklozenge: "⧫", blacksquare: "▪", blacktriangle: "▴", blacktriangledown: "▾", blacktriangleleft: "◂", blacktriangleright: "▸", blank: "␣", blk12: "▒", blk14: "░", blk34: "▓", block: "█", bne: "=⃥", bnequiv: "≡⃥", bNot: "⫭", bnot: "⌐", Bopf: "𝔹", bopf: "𝕓", bot: "⊥", bottom: "⊥", bowtie: "⋈", boxbox: "⧉", boxdl: "┐", boxdL: "╕", boxDl: "╖", boxDL: "╗", boxdr: "┌", boxdR: "╒", boxDr: "╓", boxDR: "╔", boxh: "─", boxH: "═", boxhd: "┬", boxHd: "╤", boxhD: "╥", boxHD: "╦", boxhu: "┴", boxHu: "╧", boxhU: "╨", boxHU: "╩", boxminus: "⊟", boxplus: "⊞", boxtimes: "⊠", boxul: "┘", boxuL: "╛", boxUl: "╜", boxUL: "╝", boxur: "└", boxuR: "╘", boxUr: "╙", boxUR: "╚", boxv: "│", boxV: "║", boxvh: "┼", boxvH: "╪", boxVh: "╫", boxVH: "╬", boxvl: "┤", boxvL: "╡", boxVl: "╢", boxVL: "╣", boxvr: "├", boxvR: "╞", boxVr: "╟", boxVR: "╠", bprime: "‵", breve: "˘", Breve: "˘", brvbar: "¦", bscr: "𝒷", Bscr: "ℬ", bsemi: "⁏", bsim: "∽", bsime: "⋍", bsolb: "⧅", bsol: "\\", bsolhsub: "⟈", bull: "•", bullet: "•", bump: "≎", bumpE: "⪮", bumpe: "≏", Bumpeq: "≎", bumpeq: "≏", Cacute: "Ć", cacute: "ć", capand: "⩄", capbrcup: "⩉", capcap: "⩋", cap: "∩", Cap: "⋒", capcup: "⩇", capdot: "⩀", CapitalDifferentialD: "ⅅ", caps: "∩︀", caret: "⁁", caron: "ˇ", Cayleys: "ℭ", ccaps: "⩍", Ccaron: "Č", ccaron: "č", Ccedil: "Ç", ccedil: "ç", Ccirc: "Ĉ", ccirc: "ĉ", Cconint: "∰", ccups: "⩌", ccupssm: "⩐", Cdot: "Ċ", cdot: "ċ", cedil: "¸", Cedilla: "¸", cemptyv: "⦲", cent: "¢", centerdot: "·", CenterDot: "·", cfr: "𝔠", Cfr: "ℭ", CHcy: "Ч", chcy: "ч", check: "✓", checkmark: "✓", Chi: "Χ", chi: "χ", circ: "ˆ", circeq: "≗", circlearrowleft: "↺", circlearrowright: "↻", circledast: "⊛", circledcirc: "⊚", circleddash: "⊝", CircleDot: "⊙", circledR: "®", circledS: "Ⓢ", CircleMinus: "⊖", CirclePlus: "⊕", CircleTimes: "⊗", cir: "○", cirE: "⧃", cire: "≗", cirfnint: "⨐", cirmid: "⫯", cirscir: "⧂", ClockwiseContourIntegral: "∲", CloseCurlyDoubleQuote: "”", CloseCurlyQuote: "’", clubs: "♣", clubsuit: "♣", colon: ":", Colon: "∷", Colone: "⩴", colone: "≔", coloneq: "≔", comma: ",", commat: "@", comp: "∁", compfn: "∘", complement: "∁", complexes: "ℂ", cong: "≅", congdot: "⩭", Congruent: "≡", conint: "∮", Conint: "∯", ContourIntegral: "∮", copf: "𝕔", Copf: "ℂ", coprod: "∐", Coproduct: "∐", copy: "©", COPY: "©", copysr: "℗", CounterClockwiseContourIntegral: "∳", crarr: "↵", cross: "✗", Cross: "⨯", Cscr: "𝒞", cscr: "𝒸", csub: "⫏", csube: "⫑", csup: "⫐", csupe: "⫒", ctdot: "⋯", cudarrl: "⤸", cudarrr: "⤵", cuepr: "⋞", cuesc: "⋟", cularr: "↶", cularrp: "⤽", cupbrcap: "⩈", cupcap: "⩆", CupCap: "≍", cup: "∪", Cup: "⋓", cupcup: "⩊", cupdot: "⊍", cupor: "⩅", cups: "∪︀", curarr: "↷", curarrm: "⤼", curlyeqprec: "⋞", curlyeqsucc: "⋟", curlyvee: "⋎", curlywedge: "⋏", curren: "¤", curvearrowleft: "↶", curvearrowright: "↷", cuvee: "⋎", cuwed: "⋏", cwconint: "∲", cwint: "∱", cylcty: "⌭", dagger: "†", Dagger: "‡", daleth: "ℸ", darr: "↓", Darr: "↡", dArr: "⇓", dash: "‐", Dashv: "⫤", dashv: "⊣", dbkarow: "⤏", dblac: "˝", Dcaron: "Ď", dcaron: "ď", Dcy: "Д", dcy: "д", ddagger: "‡", ddarr: "⇊", DD: "ⅅ", dd: "ⅆ", DDotrahd: "⤑", ddotseq: "⩷", deg: "°", Del: "∇", Delta: "Δ", delta: "δ", demptyv: "⦱", dfisht: "⥿", Dfr: "𝔇", dfr: "𝔡", dHar: "⥥", dharl: "⇃", dharr: "⇂", DiacriticalAcute: "´", DiacriticalDot: "˙", DiacriticalDoubleAcute: "˝", DiacriticalGrave: "`", DiacriticalTilde: "˜", diam: "⋄", diamond: "⋄", Diamond: "⋄", diamondsuit: "♦", diams: "♦", die: "¨", DifferentialD: "ⅆ", digamma: "ϝ", disin: "⋲", div: "÷", divide: "÷", divideontimes: "⋇", divonx: "⋇", DJcy: "Ђ", djcy: "ђ", dlcorn: "⌞", dlcrop: "⌍", dollar: "$", Dopf: "𝔻", dopf: "𝕕", Dot: "¨", dot: "˙", DotDot: "⃜", doteq: "≐", doteqdot: "≑", DotEqual: "≐", dotminus: "∸", dotplus: "∔", dotsquare: "⊡", doublebarwedge: "⌆", DoubleContourIntegral: "∯", DoubleDot: "¨", DoubleDownArrow: "⇓", DoubleLeftArrow: "⇐", DoubleLeftRightArrow: "⇔", DoubleLeftTee: "⫤", DoubleLongLeftArrow: "⟸", DoubleLongLeftRightArrow: "⟺", DoubleLongRightArrow: "⟹", DoubleRightArrow: "⇒", DoubleRightTee: "⊨", DoubleUpArrow: "⇑", DoubleUpDownArrow: "⇕", DoubleVerticalBar: "∥", DownArrowBar: "⤓", downarrow: "↓", DownArrow: "↓", Downarrow: "⇓", DownArrowUpArrow: "⇵", DownBreve: "̑", downdownarrows: "⇊", downharpoonleft: "⇃", downharpoonright: "⇂", DownLeftRightVector: "⥐", DownLeftTeeVector: "⥞", DownLeftVectorBar: "⥖", DownLeftVector: "↽", DownRightTeeVector: "⥟", DownRightVectorBar: "⥗", DownRightVector: "⇁", DownTeeArrow: "↧", DownTee: "⊤", drbkarow: "⤐", drcorn: "⌟", drcrop: "⌌", Dscr: "𝒟", dscr: "𝒹", DScy: "Ѕ", dscy: "ѕ", dsol: "⧶", Dstrok: "Đ", dstrok: "đ", dtdot: "⋱", dtri: "▿", dtrif: "▾", duarr: "⇵", duhar: "⥯", dwangle: "⦦", DZcy: "Џ", dzcy: "џ", dzigrarr: "⟿", Eacute: "É", eacute: "é", easter: "⩮", Ecaron: "Ě", ecaron: "ě", Ecirc: "Ê", ecirc: "ê", ecir: "≖", ecolon: "≕", Ecy: "Э", ecy: "э", eDDot: "⩷", Edot: "Ė", edot: "ė", eDot: "≑", ee: "ⅇ", efDot: "≒", Efr: "𝔈", efr: "𝔢", eg: "⪚", Egrave: "È", egrave: "è", egs: "⪖", egsdot: "⪘", el: "⪙", Element: "∈", elinters: "⏧", ell: "ℓ", els: "⪕", elsdot: "⪗", Emacr: "Ē", emacr: "ē", empty: "∅", emptyset: "∅", EmptySmallSquare: "◻", emptyv: "∅", EmptyVerySmallSquare: "▫", emsp13: " ", emsp14: " ", emsp: " ", ENG: "Ŋ", eng: "ŋ", ensp: " ", Eogon: "Ę", eogon: "ę", Eopf: "𝔼", eopf: "𝕖", epar: "⋕", eparsl: "⧣", eplus: "⩱", epsi: "ε", Epsilon: "Ε", epsilon: "ε", epsiv: "ϵ", eqcirc: "≖", eqcolon: "≕", eqsim: "≂", eqslantgtr: "⪖", eqslantless: "⪕", Equal: "⩵", equals: "=", EqualTilde: "≂", equest: "≟", Equilibrium: "⇌", equiv: "≡", equivDD: "⩸", eqvparsl: "⧥", erarr: "⥱", erDot: "≓", escr: "ℯ", Escr: "ℰ", esdot: "≐", Esim: "⩳", esim: "≂", Eta: "Η", eta: "η", ETH: "Ð", eth: "ð", Euml: "Ë", euml: "ë", euro: "€", excl: "!", exist: "∃", Exists: "∃", expectation: "ℰ", exponentiale: "ⅇ", ExponentialE: "ⅇ", fallingdotseq: "≒", Fcy: "Ф", fcy: "ф", female: "♀", ffilig: "ffi", fflig: "ff", ffllig: "ffl", Ffr: "𝔉", ffr: "𝔣", filig: "fi", FilledSmallSquare: "◼", FilledVerySmallSquare: "▪", fjlig: "fj", flat: "♭", fllig: "fl", fltns: "▱", fnof: "ƒ", Fopf: "𝔽", fopf: "𝕗", forall: "∀", ForAll: "∀", fork: "⋔", forkv: "⫙", Fouriertrf: "ℱ", fpartint: "⨍", frac12: "½", frac13: "⅓", frac14: "¼", frac15: "⅕", frac16: "⅙", frac18: "⅛", frac23: "⅔", frac25: "⅖", frac34: "¾", frac35: "⅗", frac38: "⅜", frac45: "⅘", frac56: "⅚", frac58: "⅝", frac78: "⅞", frasl: "⁄", frown: "⌢", fscr: "𝒻", Fscr: "ℱ", gacute: "ǵ", Gamma: "Γ", gamma: "γ", Gammad: "Ϝ", gammad: "ϝ", gap: "⪆", Gbreve: "Ğ", gbreve: "ğ", Gcedil: "Ģ", Gcirc: "Ĝ", gcirc: "ĝ", Gcy: "Г", gcy: "г", Gdot: "Ġ", gdot: "ġ", ge: "≥", gE: "≧", gEl: "⪌", gel: "⋛", geq: "≥", geqq: "≧", geqslant: "⩾", gescc: "⪩", ges: "⩾", gesdot: "⪀", gesdoto: "⪂", gesdotol: "⪄", gesl: "⋛︀", gesles: "⪔", Gfr: "𝔊", gfr: "𝔤", gg: "≫", Gg: "⋙", ggg: "⋙", gimel: "ℷ", GJcy: "Ѓ", gjcy: "ѓ", gla: "⪥", gl: "≷", glE: "⪒", glj: "⪤", gnap: "⪊", gnapprox: "⪊", gne: "⪈", gnE: "≩", gneq: "⪈", gneqq: "≩", gnsim: "⋧", Gopf: "𝔾", gopf: "𝕘", grave: "`", GreaterEqual: "≥", GreaterEqualLess: "⋛", GreaterFullEqual: "≧", GreaterGreater: "⪢", GreaterLess: "≷", GreaterSlantEqual: "⩾", GreaterTilde: "≳", Gscr: "𝒢", gscr: "ℊ", gsim: "≳", gsime: "⪎", gsiml: "⪐", gtcc: "⪧", gtcir: "⩺", gt: ">", GT: ">", Gt: "≫", gtdot: "⋗", gtlPar: "⦕", gtquest: "⩼", gtrapprox: "⪆", gtrarr: "⥸", gtrdot: "⋗", gtreqless: "⋛", gtreqqless: "⪌", gtrless: "≷", gtrsim: "≳", gvertneqq: "≩︀", gvnE: "≩︀", Hacek: "ˇ", hairsp: " ", half: "½", hamilt: "ℋ", HARDcy: "Ъ", hardcy: "ъ", harrcir: "⥈", harr: "↔", hArr: "⇔", harrw: "↭", Hat: "^", hbar: "ℏ", Hcirc: "Ĥ", hcirc: "ĥ", hearts: "♥", heartsuit: "♥", hellip: "…", hercon: "⊹", hfr: "𝔥", Hfr: "ℌ", HilbertSpace: "ℋ", hksearow: "⤥", hkswarow: "⤦", hoarr: "⇿", homtht: "∻", hookleftarrow: "↩", hookrightarrow: "↪", hopf: "𝕙", Hopf: "ℍ", horbar: "―", HorizontalLine: "─", hscr: "𝒽", Hscr: "ℋ", hslash: "ℏ", Hstrok: "Ħ", hstrok: "ħ", HumpDownHump: "≎", HumpEqual: "≏", hybull: "⁃", hyphen: "‐", Iacute: "Í", iacute: "í", ic: "\u2063", Icirc: "Î", icirc: "î", Icy: "И", icy: "и", Idot: "İ", IEcy: "Е", iecy: "е", iexcl: "¡", iff: "⇔", ifr: "𝔦", Ifr: "ℑ", Igrave: "Ì", igrave: "ì", ii: "ⅈ", iiiint: "⨌", iiint: "∭", iinfin: "⧜", iiota: "℩", IJlig: "IJ", ijlig: "ij", Imacr: "Ī", imacr: "ī", image: "ℑ", ImaginaryI: "ⅈ", imagline: "ℐ", imagpart: "ℑ", imath: "ı", Im: "ℑ", imof: "⊷", imped: "Ƶ", Implies: "⇒", incare: "℅", in: "∈", infin: "∞", infintie: "⧝", inodot: "ı", intcal: "⊺", int: "∫", Int: "∬", integers: "ℤ", Integral: "∫", intercal: "⊺", Intersection: "⋂", intlarhk: "⨗", intprod: "⨼", InvisibleComma: "\u2063", InvisibleTimes: "\u2062", IOcy: "Ё", iocy: "ё", Iogon: "Į", iogon: "į", Iopf: "𝕀", iopf: "𝕚", Iota: "Ι", iota: "ι", iprod: "⨼", iquest: "¿", iscr: "𝒾", Iscr: "ℐ", isin: "∈", isindot: "⋵", isinE: "⋹", isins: "⋴", isinsv: "⋳", isinv: "∈", it: "\u2062", Itilde: "Ĩ", itilde: "ĩ", Iukcy: "І", iukcy: "і", Iuml: "Ï", iuml: "ï", Jcirc: "Ĵ", jcirc: "ĵ", Jcy: "Й", jcy: "й", Jfr: "𝔍", jfr: "𝔧", jmath: "ȷ", Jopf: "𝕁", jopf: "𝕛", Jscr: "𝒥", jscr: "𝒿", Jsercy: "Ј", jsercy: "ј", Jukcy: "Є", jukcy: "є", Kappa: "Κ", kappa: "κ", kappav: "ϰ", Kcedil: "Ķ", kcedil: "ķ", Kcy: "К", kcy: "к", Kfr: "𝔎", kfr: "𝔨", kgreen: "ĸ", KHcy: "Х", khcy: "х", KJcy: "Ќ", kjcy: "ќ", Kopf: "𝕂", kopf: "𝕜", Kscr: "𝒦", kscr: "𝓀", lAarr: "⇚", Lacute: "Ĺ", lacute: "ĺ", laemptyv: "⦴", lagran: "ℒ", Lambda: "Λ", lambda: "λ", lang: "⟨", Lang: "⟪", langd: "⦑", langle: "⟨", lap: "⪅", Laplacetrf: "ℒ", laquo: "«", larrb: "⇤", larrbfs: "⤟", larr: "←", Larr: "↞", lArr: "⇐", larrfs: "⤝", larrhk: "↩", larrlp: "↫", larrpl: "⤹", larrsim: "⥳", larrtl: "↢", latail: "⤙", lAtail: "⤛", lat: "⪫", late: "⪭", lates: "⪭︀", lbarr: "⤌", lBarr: "⤎", lbbrk: "❲", lbrace: "{", lbrack: "[", lbrke: "⦋", lbrksld: "⦏", lbrkslu: "⦍", Lcaron: "Ľ", lcaron: "ľ", Lcedil: "Ļ", lcedil: "ļ", lceil: "⌈", lcub: "{", Lcy: "Л", lcy: "л", ldca: "⤶", ldquo: "“", ldquor: "„", ldrdhar: "⥧", ldrushar: "⥋", ldsh: "↲", le: "≤", lE: "≦", LeftAngleBracket: "⟨", LeftArrowBar: "⇤", leftarrow: "←", LeftArrow: "←", Leftarrow: "⇐", LeftArrowRightArrow: "⇆", leftarrowtail: "↢", LeftCeiling: "⌈", LeftDoubleBracket: "⟦", LeftDownTeeVector: "⥡", LeftDownVectorBar: "⥙", LeftDownVector: "⇃", LeftFloor: "⌊", leftharpoondown: "↽", leftharpoonup: "↼", leftleftarrows: "⇇", leftrightarrow: "↔", LeftRightArrow: "↔", Leftrightarrow: "⇔", leftrightarrows: "⇆", leftrightharpoons: "⇋", leftrightsquigarrow: "↭", LeftRightVector: "⥎", LeftTeeArrow: "↤", LeftTee: "⊣", LeftTeeVector: "⥚", leftthreetimes: "⋋", LeftTriangleBar: "⧏", LeftTriangle: "⊲", LeftTriangleEqual: "⊴", LeftUpDownVector: "⥑", LeftUpTeeVector: "⥠", LeftUpVectorBar: "⥘", LeftUpVector: "↿", LeftVectorBar: "⥒", LeftVector: "↼", lEg: "⪋", leg: "⋚", leq: "≤", leqq: "≦", leqslant: "⩽", lescc: "⪨", les: "⩽", lesdot: "⩿", lesdoto: "⪁", lesdotor: "⪃", lesg: "⋚︀", lesges: "⪓", lessapprox: "⪅", lessdot: "⋖", lesseqgtr: "⋚", lesseqqgtr: "⪋", LessEqualGreater: "⋚", LessFullEqual: "≦", LessGreater: "≶", lessgtr: "≶", LessLess: "⪡", lesssim: "≲", LessSlantEqual: "⩽", LessTilde: "≲", lfisht: "⥼", lfloor: "⌊", Lfr: "𝔏", lfr: "𝔩", lg: "≶", lgE: "⪑", lHar: "⥢", lhard: "↽", lharu: "↼", lharul: "⥪", lhblk: "▄", LJcy: "Љ", ljcy: "љ", llarr: "⇇", ll: "≪", Ll: "⋘", llcorner: "⌞", Lleftarrow: "⇚", llhard: "⥫", lltri: "◺", Lmidot: "Ŀ", lmidot: "ŀ", lmoustache: "⎰", lmoust: "⎰", lnap: "⪉", lnapprox: "⪉", lne: "⪇", lnE: "≨", lneq: "⪇", lneqq: "≨", lnsim: "⋦", loang: "⟬", loarr: "⇽", lobrk: "⟦", longleftarrow: "⟵", LongLeftArrow: "⟵", Longleftarrow: "⟸", longleftrightarrow: "⟷", LongLeftRightArrow: "⟷", Longleftrightarrow: "⟺", longmapsto: "⟼", longrightarrow: "⟶", LongRightArrow: "⟶", Longrightarrow: "⟹", looparrowleft: "↫", looparrowright: "↬", lopar: "⦅", Lopf: "𝕃", lopf: "𝕝", loplus: "⨭", lotimes: "⨴", lowast: "∗", lowbar: "_", LowerLeftArrow: "↙", LowerRightArrow: "↘", loz: "◊", lozenge: "◊", lozf: "⧫", lpar: "(", lparlt: "⦓", lrarr: "⇆", lrcorner: "⌟", lrhar: "⇋", lrhard: "⥭", lrm: "\u200e", lrtri: "⊿", lsaquo: "‹", lscr: "𝓁", Lscr: "ℒ", lsh: "↰", Lsh: "↰", lsim: "≲", lsime: "⪍", lsimg: "⪏", lsqb: "[", lsquo: "‘", lsquor: "‚", Lstrok: "Ł", lstrok: "ł", ltcc: "⪦", ltcir: "⩹", lt: "<", LT: "<", Lt: "≪", ltdot: "⋖", lthree: "⋋", ltimes: "⋉", ltlarr: "⥶", ltquest: "⩻", ltri: "◃", ltrie: "⊴", ltrif: "◂", ltrPar: "⦖", lurdshar: "⥊", luruhar: "⥦", lvertneqq: "≨︀", lvnE: "≨︀", macr: "¯", male: "♂", malt: "✠", maltese: "✠", Map: "⤅", map: "↦", mapsto: "↦", mapstodown: "↧", mapstoleft: "↤", mapstoup: "↥", marker: "▮", mcomma: "⨩", Mcy: "М", mcy: "м", mdash: "—", mDDot: "∺", measuredangle: "∡", MediumSpace: " ", Mellintrf: "ℳ", Mfr: "𝔐", mfr: "𝔪", mho: "℧", micro: "µ", midast: "*", midcir: "⫰", mid: "∣", middot: "·", minusb: "⊟", minus: "−", minusd: "∸", minusdu: "⨪", MinusPlus: "∓", mlcp: "⫛", mldr: "…", mnplus: "∓", models: "⊧", Mopf: "𝕄", mopf: "𝕞", mp: "∓", mscr: "𝓂", Mscr: "ℳ", mstpos: "∾", Mu: "Μ", mu: "μ", multimap: "⊸", mumap: "⊸", nabla: "∇", Nacute: "Ń", nacute: "ń", nang: "∠⃒", nap: "≉", napE: "⩰̸", napid: "≋̸", napos: "ʼn", napprox: "≉", natural: "♮", naturals: "ℕ", natur: "♮", nbsp: " ", nbump: "≎̸", nbumpe: "≏̸", ncap: "⩃", Ncaron: "Ň", ncaron: "ň", Ncedil: "Ņ", ncedil: "ņ", ncong: "≇", ncongdot: "⩭̸", ncup: "⩂", Ncy: "Н", ncy: "н", ndash: "–", nearhk: "⤤", nearr: "↗", neArr: "⇗", nearrow: "↗", ne: "≠", nedot: "≐̸", NegativeMediumSpace: "", NegativeThickSpace: "", NegativeThinSpace: "", NegativeVeryThinSpace: "", nequiv: "≢", nesear: "⤨", nesim: "≂̸", NestedGreaterGreater: "≫", NestedLessLess: "≪", NewLine: "\u000a", nexist: "∄", nexists: "∄", Nfr: "𝔑", nfr: "𝔫", ngE: "≧̸", nge: "≱", ngeq: "≱", ngeqq: "≧̸", ngeqslant: "⩾̸", nges: "⩾̸", nGg: "⋙̸", ngsim: "≵", nGt: "≫⃒", ngt: "≯", ngtr: "≯", nGtv: "≫̸", nharr: "↮", nhArr: "⇎", nhpar: "⫲", ni: "∋", nis: "⋼", nisd: "⋺", niv: "∋", NJcy: "Њ", njcy: "њ", nlarr: "↚", nlArr: "⇍", nldr: "‥", nlE: "≦̸", nle: "≰", nleftarrow: "↚", nLeftarrow: "⇍", nleftrightarrow: "↮", nLeftrightarrow: "⇎", nleq: "≰", nleqq: "≦̸", nleqslant: "⩽̸", nles: "⩽̸", nless: "≮", nLl: "⋘̸", nlsim: "≴", nLt: "≪⃒", nlt: "≮", nltri: "⋪", nltrie: "⋬", nLtv: "≪̸", nmid: "∤", NoBreak: "\u2060", NonBreakingSpace: " ", nopf: "𝕟", Nopf: "ℕ", Not: "⫬", not: "¬", NotCongruent: "≢", NotCupCap: "≭", NotDoubleVerticalBar: "∦", NotElement: "∉", NotEqual: "≠", NotEqualTilde: "≂̸", NotExists: "∄", NotGreater: "≯", NotGreaterEqual: "≱", NotGreaterFullEqual: "≧̸", NotGreaterGreater: "≫̸", NotGreaterLess: "≹", NotGreaterSlantEqual: "⩾̸", NotGreaterTilde: "≵", NotHumpDownHump: "≎̸", NotHumpEqual: "≏̸", notin: "∉", notindot: "⋵̸", notinE: "⋹̸", notinva: "∉", notinvb: "⋷", notinvc: "⋶", NotLeftTriangleBar: "⧏̸", NotLeftTriangle: "⋪", NotLeftTriangleEqual: "⋬", NotLess: "≮", NotLessEqual: "≰", NotLessGreater: "≸", NotLessLess: "≪̸", NotLessSlantEqual: "⩽̸", NotLessTilde: "≴", NotNestedGreaterGreater: "⪢̸", NotNestedLessLess: "⪡̸", notni: "∌", notniva: "∌", notnivb: "⋾", notnivc: "⋽", NotPrecedes: "⊀", NotPrecedesEqual: "⪯̸", NotPrecedesSlantEqual: "⋠", NotReverseElement: "∌", NotRightTriangleBar: "⧐̸", NotRightTriangle: "⋫", NotRightTriangleEqual: "⋭", NotSquareSubset: "⊏̸", NotSquareSubsetEqual: "⋢", NotSquareSuperset: "⊐̸", NotSquareSupersetEqual: "⋣", NotSubset: "⊂⃒", NotSubsetEqual: "⊈", NotSucceeds: "⊁", NotSucceedsEqual: "⪰̸", NotSucceedsSlantEqual: "⋡", NotSucceedsTilde: "≿̸", NotSuperset: "⊃⃒", NotSupersetEqual: "⊉", NotTilde: "≁", NotTildeEqual: "≄", NotTildeFullEqual: "≇", NotTildeTilde: "≉", NotVerticalBar: "∤", nparallel: "∦", npar: "∦", nparsl: "⫽⃥", npart: "∂̸", npolint: "⨔", npr: "⊀", nprcue: "⋠", nprec: "⊀", npreceq: "⪯̸", npre: "⪯̸", nrarrc: "⤳̸", nrarr: "↛", nrArr: "⇏", nrarrw: "↝̸", nrightarrow: "↛", nRightarrow: "⇏", nrtri: "⋫", nrtrie: "⋭", nsc: "⊁", nsccue: "⋡", nsce: "⪰̸", Nscr: "𝒩", nscr: "𝓃", nshortmid: "∤", nshortparallel: "∦", nsim: "≁", nsime: "≄", nsimeq: "≄", nsmid: "∤", nspar: "∦", nsqsube: "⋢", nsqsupe: "⋣", nsub: "⊄", nsubE: "⫅̸", nsube: "⊈", nsubset: "⊂⃒", nsubseteq: "⊈", nsubseteqq: "⫅̸", nsucc: "⊁", nsucceq: "⪰̸", nsup: "⊅", nsupE: "⫆̸", nsupe: "⊉", nsupset: "⊃⃒", nsupseteq: "⊉", nsupseteqq: "⫆̸", ntgl: "≹", Ntilde: "Ñ", ntilde: "ñ", ntlg: "≸", ntriangleleft: "⋪", ntrianglelefteq: "⋬", ntriangleright: "⋫", ntrianglerighteq: "⋭", Nu: "Ν", nu: "ν", num: "#", numero: "№", numsp: " ", nvap: "≍⃒", nvdash: "⊬", nvDash: "⊭", nVdash: "⊮", nVDash: "⊯", nvge: "≥⃒", nvgt: ">⃒", nvHarr: "⤄", nvinfin: "⧞", nvlArr: "⤂", nvle: "≤⃒", nvlt: "<⃒", nvltrie: "⊴⃒", nvrArr: "⤃", nvrtrie: "⊵⃒", nvsim: "∼⃒", nwarhk: "⤣", nwarr: "↖", nwArr: "⇖", nwarrow: "↖", nwnear: "⤧", Oacute: "Ó", oacute: "ó", oast: "⊛", Ocirc: "Ô", ocirc: "ô", ocir: "⊚", Ocy: "О", ocy: "о", odash: "⊝", Odblac: "Ő", odblac: "ő", odiv: "⨸", odot: "⊙", odsold: "⦼", OElig: "Œ", oelig: "œ", ofcir: "⦿", Ofr: "𝔒", ofr: "𝔬", ogon: "˛", Ograve: "Ò", ograve: "ò", ogt: "⧁", ohbar: "⦵", ohm: "Ω", oint: "∮", olarr: "↺", olcir: "⦾", olcross: "⦻", oline: "‾", olt: "⧀", Omacr: "Ō", omacr: "ō", Omega: "Ω", omega: "ω", Omicron: "Ο", omicron: "ο", omid: "⦶", ominus: "⊖", Oopf: "𝕆", oopf: "𝕠", opar: "⦷", OpenCurlyDoubleQuote: "“", OpenCurlyQuote: "‘", operp: "⦹", oplus: "⊕", orarr: "↻", Or: "⩔", or: "∨", ord: "⩝", order: "ℴ", orderof: "ℴ", ordf: "ª", ordm: "º", origof: "⊶", oror: "⩖", orslope: "⩗", orv: "⩛", oS: "Ⓢ", Oscr: "𝒪", oscr: "ℴ", Oslash: "Ø", oslash: "ø", osol: "⊘", Otilde: "Õ", otilde: "õ", otimesas: "⨶", Otimes: "⨷", otimes: "⊗", Ouml: "Ö", ouml: "ö", ovbar: "⌽", OverBar: "‾", OverBrace: "⏞", OverBracket: "⎴", OverParenthesis: "⏜", para: "¶", parallel: "∥", par: "∥", parsim: "⫳", parsl: "⫽", part: "∂", PartialD: "∂", Pcy: "П", pcy: "п", percnt: "%", period: ".", permil: "‰", perp: "⊥", pertenk: "‱", Pfr: "𝔓", pfr: "𝔭", Phi: "Φ", phi: "φ", phiv: "ϕ", phmmat: "ℳ", phone: "☎", Pi: "Π", pi: "π", pitchfork: "⋔", piv: "ϖ", planck: "ℏ", planckh: "ℎ", plankv: "ℏ", plusacir: "⨣", plusb: "⊞", pluscir: "⨢", plus: "+", plusdo: "∔", plusdu: "⨥", pluse: "⩲", PlusMinus: "±", plusmn: "±", plussim: "⨦", plustwo: "⨧", pm: "±", Poincareplane: "ℌ", pointint: "⨕", popf: "𝕡", Popf: "ℙ", pound: "£", prap: "⪷", Pr: "⪻", pr: "≺", prcue: "≼", precapprox: "⪷", prec: "≺", preccurlyeq: "≼", Precedes: "≺", PrecedesEqual: "⪯", PrecedesSlantEqual: "≼", PrecedesTilde: "≾", preceq: "⪯", precnapprox: "⪹", precneqq: "⪵", precnsim: "⋨", pre: "⪯", prE: "⪳", precsim: "≾", prime: "′", Prime: "″", primes: "ℙ", prnap: "⪹", prnE: "⪵", prnsim: "⋨", prod: "∏", Product: "∏", profalar: "⌮", profline: "⌒", profsurf: "⌓", prop: "∝", Proportional: "∝", Proportion: "∷", propto: "∝", prsim: "≾", prurel: "⊰", Pscr: "𝒫", pscr: "𝓅", Psi: "Ψ", psi: "ψ", puncsp: " ", Qfr: "𝔔", qfr: "𝔮", qint: "⨌", qopf: "𝕢", Qopf: "ℚ", qprime: "⁗", Qscr: "𝒬", qscr: "𝓆", quaternions: "ℍ", quatint: "⨖", quest: "?", questeq: "≟", quot: "\"", QUOT: "\"", rAarr: "⇛", race: "∽̱", Racute: "Ŕ", racute: "ŕ", radic: "√", raemptyv: "⦳", rang: "⟩", Rang: "⟫", rangd: "⦒", range: "⦥", rangle: "⟩", raquo: "»", rarrap: "⥵", rarrb: "⇥", rarrbfs: "⤠", rarrc: "⤳", rarr: "→", Rarr: "↠", rArr: "⇒", rarrfs: "⤞", rarrhk: "↪", rarrlp: "↬", rarrpl: "⥅", rarrsim: "⥴", Rarrtl: "⤖", rarrtl: "↣", rarrw: "↝", ratail: "⤚", rAtail: "⤜", ratio: "∶", rationals: "ℚ", rbarr: "⤍", rBarr: "⤏", RBarr: "⤐", rbbrk: "❳", rbrace: "}", rbrack: "]", rbrke: "⦌", rbrksld: "⦎", rbrkslu: "⦐", Rcaron: "Ř", rcaron: "ř", Rcedil: "Ŗ", rcedil: "ŗ", rceil: "⌉", rcub: "}", Rcy: "Р", rcy: "р", rdca: "⤷", rdldhar: "⥩", rdquo: "”", rdquor: "”", rdsh: "↳", real: "ℜ", realine: "ℛ", realpart: "ℜ", reals: "ℝ", Re: "ℜ", rect: "▭", reg: "®", REG: "®", ReverseElement: "∋", ReverseEquilibrium: "⇋", ReverseUpEquilibrium: "⥯", rfisht: "⥽", rfloor: "⌋", rfr: "𝔯", Rfr: "ℜ", rHar: "⥤", rhard: "⇁", rharu: "⇀", rharul: "⥬", Rho: "Ρ", rho: "ρ", rhov: "ϱ", RightAngleBracket: "⟩", RightArrowBar: "⇥", rightarrow: "→", RightArrow: "→", Rightarrow: "⇒", RightArrowLeftArrow: "⇄", rightarrowtail: "↣", RightCeiling: "⌉", RightDoubleBracket: "⟧", RightDownTeeVector: "⥝", RightDownVectorBar: "⥕", RightDownVector: "⇂", RightFloor: "⌋", rightharpoondown: "⇁", rightharpoonup: "⇀", rightleftarrows: "⇄", rightleftharpoons: "⇌", rightrightarrows: "⇉", rightsquigarrow: "↝", RightTeeArrow: "↦", RightTee: "⊢", RightTeeVector: "⥛", rightthreetimes: "⋌", RightTriangleBar: "⧐", RightTriangle: "⊳", RightTriangleEqual: "⊵", RightUpDownVector: "⥏", RightUpTeeVector: "⥜", RightUpVectorBar: "⥔", RightUpVector: "↾", RightVectorBar: "⥓", RightVector: "⇀", ring: "˚", risingdotseq: "≓", rlarr: "⇄", rlhar: "⇌", rlm: "\u200f", rmoustache: "⎱", rmoust: "⎱", rnmid: "⫮", roang: "⟭", roarr: "⇾", robrk: "⟧", ropar: "⦆", ropf: "𝕣", Ropf: "ℝ", roplus: "⨮", rotimes: "⨵", RoundImplies: "⥰", rpar: ")", rpargt: "⦔", rppolint: "⨒", rrarr: "⇉", Rrightarrow: "⇛", rsaquo: "›", rscr: "𝓇", Rscr: "ℛ", rsh: "↱", Rsh: "↱", rsqb: "]", rsquo: "’", rsquor: "’", rthree: "⋌", rtimes: "⋊", rtri: "▹", rtrie: "⊵", rtrif: "▸", rtriltri: "⧎", RuleDelayed: "⧴", ruluhar: "⥨", rx: "℞", Sacute: "Ś", sacute: "ś", sbquo: "‚", scap: "⪸", Scaron: "Š", scaron: "š", Sc: "⪼", sc: "≻", sccue: "≽", sce: "⪰", scE: "⪴", Scedil: "Ş", scedil: "ş", Scirc: "Ŝ", scirc: "ŝ", scnap: "⪺", scnE: "⪶", scnsim: "⋩", scpolint: "⨓", scsim: "≿", Scy: "С", scy: "с", sdotb: "⊡", sdot: "⋅", sdote: "⩦", searhk: "⤥", searr: "↘", seArr: "⇘", searrow: "↘", sect: "§", semi: ";", seswar: "⤩", setminus: "∖", setmn: "∖", sext: "✶", Sfr: "𝔖", sfr: "𝔰", sfrown: "⌢", sharp: "♯", SHCHcy: "Щ", shchcy: "щ", SHcy: "Ш", shcy: "ш", ShortDownArrow: "↓", ShortLeftArrow: "←", shortmid: "∣", shortparallel: "∥", ShortRightArrow: "→", ShortUpArrow: "↑", shy: "\u00ad", Sigma: "Σ", sigma: "σ", sigmaf: "ς", sigmav: "ς", sim: "∼", simdot: "⩪", sime: "≃", simeq: "≃", simg: "⪞", simgE: "⪠", siml: "⪝", simlE: "⪟", simne: "≆", simplus: "⨤", simrarr: "⥲", slarr: "←", SmallCircle: "∘", smallsetminus: "∖", smashp: "⨳", smeparsl: "⧤", smid: "∣", smile: "⌣", smt: "⪪", smte: "⪬", smtes: "⪬︀", SOFTcy: "Ь", softcy: "ь", solbar: "⌿", solb: "⧄", sol: "/", Sopf: "𝕊", sopf: "𝕤", spades: "♠", spadesuit: "♠", spar: "∥", sqcap: "⊓", sqcaps: "⊓︀", sqcup: "⊔", sqcups: "⊔︀", Sqrt: "√", sqsub: "⊏", sqsube: "⊑", sqsubset: "⊏", sqsubseteq: "⊑", sqsup: "⊐", sqsupe: "⊒", sqsupset: "⊐", sqsupseteq: "⊒", square: "□", Square: "□", SquareIntersection: "⊓", SquareSubset: "⊏", SquareSubsetEqual: "⊑", SquareSuperset: "⊐", SquareSupersetEqual: "⊒", SquareUnion: "⊔", squarf: "▪", squ: "□", squf: "▪", srarr: "→", Sscr: "𝒮", sscr: "𝓈", ssetmn: "∖", ssmile: "⌣", sstarf: "⋆", Star: "⋆", star: "☆", starf: "★", straightepsilon: "ϵ", straightphi: "ϕ", strns: "¯", sub: "⊂", Sub: "⋐", subdot: "⪽", subE: "⫅", sube: "⊆", subedot: "⫃", submult: "⫁", subnE: "⫋", subne: "⊊", subplus: "⪿", subrarr: "⥹", subset: "⊂", Subset: "⋐", subseteq: "⊆", subseteqq: "⫅", SubsetEqual: "⊆", subsetneq: "⊊", subsetneqq: "⫋", subsim: "⫇", subsub: "⫕", subsup: "⫓", succapprox: "⪸", succ: "≻", succcurlyeq: "≽", Succeeds: "≻", SucceedsEqual: "⪰", SucceedsSlantEqual: "≽", SucceedsTilde: "≿", succeq: "⪰", succnapprox: "⪺", succneqq: "⪶", succnsim: "⋩", succsim: "≿", SuchThat: "∋", sum: "∑", Sum: "∑", sung: "♪", sup1: "¹", sup2: "²", sup3: "³", sup: "⊃", Sup: "⋑", supdot: "⪾", supdsub: "⫘", supE: "⫆", supe: "⊇", supedot: "⫄", Superset: "⊃", SupersetEqual: "⊇", suphsol: "⟉", suphsub: "⫗", suplarr: "⥻", supmult: "⫂", supnE: "⫌", supne: "⊋", supplus: "⫀", supset: "⊃", Supset: "⋑", supseteq: "⊇", supseteqq: "⫆", supsetneq: "⊋", supsetneqq: "⫌", supsim: "⫈", supsub: "⫔", supsup: "⫖", swarhk: "⤦", swarr: "↙", swArr: "⇙", swarrow: "↙", swnwar: "⤪", szlig: "ß", Tab: "\u0009", target: "⌖", Tau: "Τ", tau: "τ", tbrk: "⎴", Tcaron: "Ť", tcaron: "ť", Tcedil: "Ţ", tcedil: "ţ", Tcy: "Т", tcy: "т", tdot: "⃛", telrec: "⌕", Tfr: "𝔗", tfr: "𝔱", there4: "∴", therefore: "∴", Therefore: "∴", Theta: "Θ", theta: "θ", thetasym: "ϑ", thetav: "ϑ", thickapprox: "≈", thicksim: "∼", ThickSpace: " ", ThinSpace: " ", thinsp: " ", thkap: "≈", thksim: "∼", THORN: "Þ", thorn: "þ", tilde: "˜", Tilde: "∼", TildeEqual: "≃", TildeFullEqual: "≅", TildeTilde: "≈", timesbar: "⨱", timesb: "⊠", times: "×", timesd: "⨰", tint: "∭", toea: "⤨", topbot: "⌶", topcir: "⫱", top: "⊤", Topf: "𝕋", topf: "𝕥", topfork: "⫚", tosa: "⤩", tprime: "‴", trade: "™", TRADE: "™", triangle: "▵", triangledown: "▿", triangleleft: "◃", trianglelefteq: "⊴", triangleq: "≜", triangleright: "▹", trianglerighteq: "⊵", tridot: "◬", trie: "≜", triminus: "⨺", TripleDot: "⃛", triplus: "⨹", trisb: "⧍", tritime: "⨻", trpezium: "⏢", Tscr: "𝒯", tscr: "𝓉", TScy: "Ц", tscy: "ц", TSHcy: "Ћ", tshcy: "ћ", Tstrok: "Ŧ", tstrok: "ŧ", twixt: "≬", twoheadleftarrow: "↞", twoheadrightarrow: "↠", Uacute: "Ú", uacute: "ú", uarr: "↑", Uarr: "↟", uArr: "⇑", Uarrocir: "⥉", Ubrcy: "Ў", ubrcy: "ў", Ubreve: "Ŭ", ubreve: "ŭ", Ucirc: "Û", ucirc: "û", Ucy: "У", ucy: "у", udarr: "⇅", Udblac: "Ű", udblac: "ű", udhar: "⥮", ufisht: "⥾", Ufr: "𝔘", ufr: "𝔲", Ugrave: "Ù", ugrave: "ù", uHar: "⥣", uharl: "↿", uharr: "↾", uhblk: "▀", ulcorn: "⌜", ulcorner: "⌜", ulcrop: "⌏", ultri: "◸", Umacr: "Ū", umacr: "ū", uml: "¨", UnderBar: "_", UnderBrace: "⏟", UnderBracket: "⎵", UnderParenthesis: "⏝", Union: "⋃", UnionPlus: "⊎", Uogon: "Ų", uogon: "ų", Uopf: "𝕌", uopf: "𝕦", UpArrowBar: "⤒", uparrow: "↑", UpArrow: "↑", Uparrow: "⇑", UpArrowDownArrow: "⇅", updownarrow: "↕", UpDownArrow: "↕", Updownarrow: "⇕", UpEquilibrium: "⥮", upharpoonleft: "↿", upharpoonright: "↾", uplus: "⊎", UpperLeftArrow: "↖", UpperRightArrow: "↗", upsi: "υ", Upsi: "ϒ", upsih: "ϒ", Upsilon: "Υ", upsilon: "υ", UpTeeArrow: "↥", UpTee: "⊥", upuparrows: "⇈", urcorn: "⌝", urcorner: "⌝", urcrop: "⌎", Uring: "Ů", uring: "ů", urtri: "◹", Uscr: "𝒰", uscr: "𝓊", utdot: "⋰", Utilde: "Ũ", utilde: "ũ", utri: "▵", utrif: "▴", uuarr: "⇈", Uuml: "Ü", uuml: "ü", uwangle: "⦧", vangrt: "⦜", varepsilon: "ϵ", varkappa: "ϰ", varnothing: "∅", varphi: "ϕ", varpi: "ϖ", varpropto: "∝", varr: "↕", vArr: "⇕", varrho: "ϱ", varsigma: "ς", varsubsetneq: "⊊︀", varsubsetneqq: "⫋︀", varsupsetneq: "⊋︀", varsupsetneqq: "⫌︀", vartheta: "ϑ", vartriangleleft: "⊲", vartriangleright: "⊳", vBar: "⫨", Vbar: "⫫", vBarv: "⫩", Vcy: "В", vcy: "в", vdash: "⊢", vDash: "⊨", Vdash: "⊩", VDash: "⊫", Vdashl: "⫦", veebar: "⊻", vee: "∨", Vee: "⋁", veeeq: "≚", vellip: "⋮", verbar: "|", Verbar: "‖", vert: "|", Vert: "‖", VerticalBar: "∣", VerticalLine: "|", VerticalSeparator: "❘", VerticalTilde: "≀", VeryThinSpace: " ", Vfr: "𝔙", vfr: "𝔳", vltri: "⊲", vnsub: "⊂⃒", vnsup: "⊃⃒", Vopf: "𝕍", vopf: "𝕧", vprop: "∝", vrtri: "⊳", Vscr: "𝒱", vscr: "𝓋", vsubnE: "⫋︀", vsubne: "⊊︀", vsupnE: "⫌︀", vsupne: "⊋︀", Vvdash: "⊪", vzigzag: "⦚", Wcirc: "Ŵ", wcirc: "ŵ", wedbar: "⩟", wedge: "∧", Wedge: "⋀", wedgeq: "≙", weierp: "℘", Wfr: "𝔚", wfr: "𝔴", Wopf: "𝕎", wopf: "𝕨", wp: "℘", wr: "≀", wreath: "≀", Wscr: "𝒲", wscr: "𝓌", xcap: "⋂", xcirc: "◯", xcup: "⋃", xdtri: "▽", Xfr: "𝔛", xfr: "𝔵", xharr: "⟷", xhArr: "⟺", Xi: "Ξ", xi: "ξ", xlarr: "⟵", xlArr: "⟸", xmap: "⟼", xnis: "⋻", xodot: "⨀", Xopf: "𝕏", xopf: "𝕩", xoplus: "⨁", xotime: "⨂", xrarr: "⟶", xrArr: "⟹", Xscr: "𝒳", xscr: "𝓍", xsqcup: "⨆", xuplus: "⨄", xutri: "△", xvee: "⋁", xwedge: "⋀", Yacute: "Ý", yacute: "ý", YAcy: "Я", yacy: "я", Ycirc: "Ŷ", ycirc: "ŷ", Ycy: "Ы", ycy: "ы", yen: "¥", Yfr: "𝔜", yfr: "𝔶", YIcy: "Ї", yicy: "ї", Yopf: "𝕐", yopf: "𝕪", Yscr: "𝒴", yscr: "𝓎", YUcy: "Ю", yucy: "ю", yuml: "ÿ", Yuml: "Ÿ", Zacute: "Ź", zacute: "ź", Zcaron: "Ž", zcaron: "ž", Zcy: "З", zcy: "з", Zdot: "Ż", zdot: "ż", zeetrf: "ℨ", ZeroWidthSpace: "", Zeta: "Ζ", zeta: "ζ", zfr: "𝔷", Zfr: "ℨ", ZHcy: "Ж", zhcy: "ж", zigrarr: "⇝", zopf: "𝕫", Zopf: "ℤ", Zscr: "𝒵", zscr: "𝓏", zwj: "\u200d", zwnj: "\u200c"
|
13 | };
|
14 |
|
15 | var HEXCHARCODE = /^#[xX]([A-Fa-f0-9]+)$/;
|
16 | var CHARCODE = /^#([0-9]+)$/;
|
17 | var NAMED = /^([A-Za-z0-9]+)$/;
|
18 | var EntityParser = /** @class */ (function () {
|
19 | function EntityParser(named) {
|
20 | this.named = named;
|
21 | }
|
22 | EntityParser.prototype.parse = function (entity) {
|
23 | if (!entity) {
|
24 | return;
|
25 | }
|
26 | var matches = entity.match(HEXCHARCODE);
|
27 | if (matches) {
|
28 | return String.fromCharCode(parseInt(matches[1], 16));
|
29 | }
|
30 | matches = entity.match(CHARCODE);
|
31 | if (matches) {
|
32 | return String.fromCharCode(parseInt(matches[1], 10));
|
33 | }
|
34 | matches = entity.match(NAMED);
|
35 | if (matches) {
|
36 | return this.named[matches[1]];
|
37 | }
|
38 | };
|
39 | return EntityParser;
|
40 | }());
|
41 |
|
42 | var WSP = /[\t\n\f ]/;
|
43 | var ALPHA = /[A-Za-z]/;
|
44 | var CRLF = /\r\n?/g;
|
45 | function isSpace(char) {
|
46 | return WSP.test(char);
|
47 | }
|
48 | function isAlpha(char) {
|
49 | return ALPHA.test(char);
|
50 | }
|
51 | function preprocessInput(input) {
|
52 | return input.replace(CRLF, '\n');
|
53 | }
|
54 |
|
55 | var EventedTokenizer = /** @class */ (function () {
|
56 | function EventedTokenizer(delegate, entityParser, mode) {
|
57 | if (mode === void 0) { mode = 'precompile'; }
|
58 | this.delegate = delegate;
|
59 | this.entityParser = entityParser;
|
60 | this.mode = mode;
|
61 | this.state = "beforeData" /* beforeData */;
|
62 | this.line = -1;
|
63 | this.column = -1;
|
64 | this.input = '';
|
65 | this.index = -1;
|
66 | this.tagNameBuffer = '';
|
67 | this.states = {
|
68 | beforeData: function () {
|
69 | var char = this.peek();
|
70 | if (char === '<' && !this.isIgnoredEndTag()) {
|
71 | this.transitionTo("tagOpen" /* tagOpen */);
|
72 | this.markTagStart();
|
73 | this.consume();
|
74 | }
|
75 | else {
|
76 | if (this.mode === 'precompile' && char === '\n') {
|
77 | var tag = this.tagNameBuffer.toLowerCase();
|
78 | if (tag === 'pre' || tag === 'textarea') {
|
79 | this.consume();
|
80 | }
|
81 | }
|
82 | this.transitionTo("data" /* data */);
|
83 | this.delegate.beginData();
|
84 | }
|
85 | },
|
86 | data: function () {
|
87 | var char = this.peek();
|
88 | var tag = this.tagNameBuffer;
|
89 | if (char === '<' && !this.isIgnoredEndTag()) {
|
90 | this.delegate.finishData();
|
91 | this.transitionTo("tagOpen" /* tagOpen */);
|
92 | this.markTagStart();
|
93 | this.consume();
|
94 | }
|
95 | else if (char === '&' && tag !== 'script' && tag !== 'style') {
|
96 | this.consume();
|
97 | this.delegate.appendToData(this.consumeCharRef() || '&');
|
98 | }
|
99 | else {
|
100 | this.consume();
|
101 | this.delegate.appendToData(char);
|
102 | }
|
103 | },
|
104 | tagOpen: function () {
|
105 | var char = this.consume();
|
106 | if (char === '!') {
|
107 | this.transitionTo("markupDeclarationOpen" /* markupDeclarationOpen */);
|
108 | }
|
109 | else if (char === '/') {
|
110 | this.transitionTo("endTagOpen" /* endTagOpen */);
|
111 | }
|
112 | else if (char === '@' || char === ':' || isAlpha(char)) {
|
113 | this.transitionTo("tagName" /* tagName */);
|
114 | this.tagNameBuffer = '';
|
115 | this.delegate.beginStartTag();
|
116 | this.appendToTagName(char);
|
117 | }
|
118 | },
|
119 | markupDeclarationOpen: function () {
|
120 | var char = this.consume();
|
121 | if (char === '-' && this.peek() === '-') {
|
122 | this.consume();
|
123 | this.transitionTo("commentStart" /* commentStart */);
|
124 | this.delegate.beginComment();
|
125 | }
|
126 | else {
|
127 | var maybeDoctype = char.toUpperCase() + this.input.substring(this.index, this.index + 6).toUpperCase();
|
128 | if (maybeDoctype === 'DOCTYPE') {
|
129 | this.consume();
|
130 | this.consume();
|
131 | this.consume();
|
132 | this.consume();
|
133 | this.consume();
|
134 | this.consume();
|
135 | this.transitionTo("doctype" /* doctype */);
|
136 | if (this.delegate.beginDoctype)
|
137 | this.delegate.beginDoctype();
|
138 | }
|
139 | }
|
140 | },
|
141 | doctype: function () {
|
142 | var char = this.consume();
|
143 | if (isSpace(char)) {
|
144 | this.transitionTo("beforeDoctypeName" /* beforeDoctypeName */);
|
145 | }
|
146 | },
|
147 | beforeDoctypeName: function () {
|
148 | var char = this.consume();
|
149 | if (isSpace(char)) {
|
150 | return;
|
151 | }
|
152 | else {
|
153 | this.transitionTo("doctypeName" /* doctypeName */);
|
154 | if (this.delegate.appendToDoctypeName)
|
155 | this.delegate.appendToDoctypeName(char.toLowerCase());
|
156 | }
|
157 | },
|
158 | doctypeName: function () {
|
159 | var char = this.consume();
|
160 | if (isSpace(char)) {
|
161 | this.transitionTo("afterDoctypeName" /* afterDoctypeName */);
|
162 | }
|
163 | else if (char === '>') {
|
164 | if (this.delegate.endDoctype)
|
165 | this.delegate.endDoctype();
|
166 | this.transitionTo("beforeData" /* beforeData */);
|
167 | }
|
168 | else {
|
169 | if (this.delegate.appendToDoctypeName)
|
170 | this.delegate.appendToDoctypeName(char.toLowerCase());
|
171 | }
|
172 | },
|
173 | afterDoctypeName: function () {
|
174 | var char = this.consume();
|
175 | if (isSpace(char)) {
|
176 | return;
|
177 | }
|
178 | else if (char === '>') {
|
179 | if (this.delegate.endDoctype)
|
180 | this.delegate.endDoctype();
|
181 | this.transitionTo("beforeData" /* beforeData */);
|
182 | }
|
183 | else {
|
184 | var nextSixChars = char.toUpperCase() + this.input.substring(this.index, this.index + 5).toUpperCase();
|
185 | var isPublic = nextSixChars.toUpperCase() === 'PUBLIC';
|
186 | var isSystem = nextSixChars.toUpperCase() === 'SYSTEM';
|
187 | if (isPublic || isSystem) {
|
188 | this.consume();
|
189 | this.consume();
|
190 | this.consume();
|
191 | this.consume();
|
192 | this.consume();
|
193 | this.consume();
|
194 | }
|
195 | if (isPublic) {
|
196 | this.transitionTo("afterDoctypePublicKeyword" /* afterDoctypePublicKeyword */);
|
197 | }
|
198 | else if (isSystem) {
|
199 | this.transitionTo("afterDoctypeSystemKeyword" /* afterDoctypeSystemKeyword */);
|
200 | }
|
201 | }
|
202 | },
|
203 | afterDoctypePublicKeyword: function () {
|
204 | var char = this.peek();
|
205 | if (isSpace(char)) {
|
206 | this.transitionTo("beforeDoctypePublicIdentifier" /* beforeDoctypePublicIdentifier */);
|
207 | this.consume();
|
208 | }
|
209 | else if (char === '"') {
|
210 | this.transitionTo("doctypePublicIdentifierDoubleQuoted" /* doctypePublicIdentifierDoubleQuoted */);
|
211 | this.consume();
|
212 | }
|
213 | else if (char === "'") {
|
214 | this.transitionTo("doctypePublicIdentifierSingleQuoted" /* doctypePublicIdentifierSingleQuoted */);
|
215 | this.consume();
|
216 | }
|
217 | else if (char === '>') {
|
218 | this.consume();
|
219 | if (this.delegate.endDoctype)
|
220 | this.delegate.endDoctype();
|
221 | this.transitionTo("beforeData" /* beforeData */);
|
222 | }
|
223 | },
|
224 | doctypePublicIdentifierDoubleQuoted: function () {
|
225 | var char = this.consume();
|
226 | if (char === '"') {
|
227 | this.transitionTo("afterDoctypePublicIdentifier" /* afterDoctypePublicIdentifier */);
|
228 | }
|
229 | else if (char === '>') {
|
230 | if (this.delegate.endDoctype)
|
231 | this.delegate.endDoctype();
|
232 | this.transitionTo("beforeData" /* beforeData */);
|
233 | }
|
234 | else {
|
235 | if (this.delegate.appendToDoctypePublicIdentifier)
|
236 | this.delegate.appendToDoctypePublicIdentifier(char);
|
237 | }
|
238 | },
|
239 | doctypePublicIdentifierSingleQuoted: function () {
|
240 | var char = this.consume();
|
241 | if (char === "'") {
|
242 | this.transitionTo("afterDoctypePublicIdentifier" /* afterDoctypePublicIdentifier */);
|
243 | }
|
244 | else if (char === '>') {
|
245 | if (this.delegate.endDoctype)
|
246 | this.delegate.endDoctype();
|
247 | this.transitionTo("beforeData" /* beforeData */);
|
248 | }
|
249 | else {
|
250 | if (this.delegate.appendToDoctypePublicIdentifier)
|
251 | this.delegate.appendToDoctypePublicIdentifier(char);
|
252 | }
|
253 | },
|
254 | afterDoctypePublicIdentifier: function () {
|
255 | var char = this.consume();
|
256 | if (isSpace(char)) {
|
257 | this.transitionTo("betweenDoctypePublicAndSystemIdentifiers" /* betweenDoctypePublicAndSystemIdentifiers */);
|
258 | }
|
259 | else if (char === '>') {
|
260 | if (this.delegate.endDoctype)
|
261 | this.delegate.endDoctype();
|
262 | this.transitionTo("beforeData" /* beforeData */);
|
263 | }
|
264 | else if (char === '"') {
|
265 | this.transitionTo("doctypeSystemIdentifierDoubleQuoted" /* doctypeSystemIdentifierDoubleQuoted */);
|
266 | }
|
267 | else if (char === "'") {
|
268 | this.transitionTo("doctypeSystemIdentifierSingleQuoted" /* doctypeSystemIdentifierSingleQuoted */);
|
269 | }
|
270 | },
|
271 | betweenDoctypePublicAndSystemIdentifiers: function () {
|
272 | var char = this.consume();
|
273 | if (isSpace(char)) {
|
274 | return;
|
275 | }
|
276 | else if (char === '>') {
|
277 | if (this.delegate.endDoctype)
|
278 | this.delegate.endDoctype();
|
279 | this.transitionTo("beforeData" /* beforeData */);
|
280 | }
|
281 | else if (char === '"') {
|
282 | this.transitionTo("doctypeSystemIdentifierDoubleQuoted" /* doctypeSystemIdentifierDoubleQuoted */);
|
283 | }
|
284 | else if (char === "'") {
|
285 | this.transitionTo("doctypeSystemIdentifierSingleQuoted" /* doctypeSystemIdentifierSingleQuoted */);
|
286 | }
|
287 | },
|
288 | doctypeSystemIdentifierDoubleQuoted: function () {
|
289 | var char = this.consume();
|
290 | if (char === '"') {
|
291 | this.transitionTo("afterDoctypeSystemIdentifier" /* afterDoctypeSystemIdentifier */);
|
292 | }
|
293 | else if (char === '>') {
|
294 | if (this.delegate.endDoctype)
|
295 | this.delegate.endDoctype();
|
296 | this.transitionTo("beforeData" /* beforeData */);
|
297 | }
|
298 | else {
|
299 | if (this.delegate.appendToDoctypeSystemIdentifier)
|
300 | this.delegate.appendToDoctypeSystemIdentifier(char);
|
301 | }
|
302 | },
|
303 | doctypeSystemIdentifierSingleQuoted: function () {
|
304 | var char = this.consume();
|
305 | if (char === "'") {
|
306 | this.transitionTo("afterDoctypeSystemIdentifier" /* afterDoctypeSystemIdentifier */);
|
307 | }
|
308 | else if (char === '>') {
|
309 | if (this.delegate.endDoctype)
|
310 | this.delegate.endDoctype();
|
311 | this.transitionTo("beforeData" /* beforeData */);
|
312 | }
|
313 | else {
|
314 | if (this.delegate.appendToDoctypeSystemIdentifier)
|
315 | this.delegate.appendToDoctypeSystemIdentifier(char);
|
316 | }
|
317 | },
|
318 | afterDoctypeSystemIdentifier: function () {
|
319 | var char = this.consume();
|
320 | if (isSpace(char)) {
|
321 | return;
|
322 | }
|
323 | else if (char === '>') {
|
324 | if (this.delegate.endDoctype)
|
325 | this.delegate.endDoctype();
|
326 | this.transitionTo("beforeData" /* beforeData */);
|
327 | }
|
328 | },
|
329 | commentStart: function () {
|
330 | var char = this.consume();
|
331 | if (char === '-') {
|
332 | this.transitionTo("commentStartDash" /* commentStartDash */);
|
333 | }
|
334 | else if (char === '>') {
|
335 | this.delegate.finishComment();
|
336 | this.transitionTo("beforeData" /* beforeData */);
|
337 | }
|
338 | else {
|
339 | this.delegate.appendToCommentData(char);
|
340 | this.transitionTo("comment" /* comment */);
|
341 | }
|
342 | },
|
343 | commentStartDash: function () {
|
344 | var char = this.consume();
|
345 | if (char === '-') {
|
346 | this.transitionTo("commentEnd" /* commentEnd */);
|
347 | }
|
348 | else if (char === '>') {
|
349 | this.delegate.finishComment();
|
350 | this.transitionTo("beforeData" /* beforeData */);
|
351 | }
|
352 | else {
|
353 | this.delegate.appendToCommentData('-');
|
354 | this.transitionTo("comment" /* comment */);
|
355 | }
|
356 | },
|
357 | comment: function () {
|
358 | var char = this.consume();
|
359 | if (char === '-') {
|
360 | this.transitionTo("commentEndDash" /* commentEndDash */);
|
361 | }
|
362 | else {
|
363 | this.delegate.appendToCommentData(char);
|
364 | }
|
365 | },
|
366 | commentEndDash: function () {
|
367 | var char = this.consume();
|
368 | if (char === '-') {
|
369 | this.transitionTo("commentEnd" /* commentEnd */);
|
370 | }
|
371 | else {
|
372 | this.delegate.appendToCommentData('-' + char);
|
373 | this.transitionTo("comment" /* comment */);
|
374 | }
|
375 | },
|
376 | commentEnd: function () {
|
377 | var char = this.consume();
|
378 | if (char === '>') {
|
379 | this.delegate.finishComment();
|
380 | this.transitionTo("beforeData" /* beforeData */);
|
381 | }
|
382 | else {
|
383 | this.delegate.appendToCommentData('--' + char);
|
384 | this.transitionTo("comment" /* comment */);
|
385 | }
|
386 | },
|
387 | tagName: function () {
|
388 | var char = this.consume();
|
389 | if (isSpace(char)) {
|
390 | this.transitionTo("beforeAttributeName" /* beforeAttributeName */);
|
391 | }
|
392 | else if (char === '/') {
|
393 | this.transitionTo("selfClosingStartTag" /* selfClosingStartTag */);
|
394 | }
|
395 | else if (char === '>') {
|
396 | this.delegate.finishTag();
|
397 | this.transitionTo("beforeData" /* beforeData */);
|
398 | }
|
399 | else {
|
400 | this.appendToTagName(char);
|
401 | }
|
402 | },
|
403 | endTagName: function () {
|
404 | var char = this.consume();
|
405 | if (isSpace(char)) {
|
406 | this.transitionTo("beforeAttributeName" /* beforeAttributeName */);
|
407 | this.tagNameBuffer = '';
|
408 | }
|
409 | else if (char === '/') {
|
410 | this.transitionTo("selfClosingStartTag" /* selfClosingStartTag */);
|
411 | this.tagNameBuffer = '';
|
412 | }
|
413 | else if (char === '>') {
|
414 | this.delegate.finishTag();
|
415 | this.transitionTo("beforeData" /* beforeData */);
|
416 | this.tagNameBuffer = '';
|
417 | }
|
418 | else {
|
419 | this.appendToTagName(char);
|
420 | }
|
421 | },
|
422 | beforeAttributeName: function () {
|
423 | var char = this.peek();
|
424 | if (isSpace(char)) {
|
425 | this.consume();
|
426 | return;
|
427 | }
|
428 | else if (char === '/') {
|
429 | this.transitionTo("selfClosingStartTag" /* selfClosingStartTag */);
|
430 | this.consume();
|
431 | }
|
432 | else if (char === '>') {
|
433 | this.consume();
|
434 | this.delegate.finishTag();
|
435 | this.transitionTo("beforeData" /* beforeData */);
|
436 | }
|
437 | else if (char === '=') {
|
438 | this.delegate.reportSyntaxError('attribute name cannot start with equals sign');
|
439 | this.transitionTo("attributeName" /* attributeName */);
|
440 | this.delegate.beginAttribute();
|
441 | this.consume();
|
442 | this.delegate.appendToAttributeName(char);
|
443 | }
|
444 | else {
|
445 | this.transitionTo("attributeName" /* attributeName */);
|
446 | this.delegate.beginAttribute();
|
447 | }
|
448 | },
|
449 | attributeName: function () {
|
450 | var char = this.peek();
|
451 | if (isSpace(char)) {
|
452 | this.transitionTo("afterAttributeName" /* afterAttributeName */);
|
453 | this.consume();
|
454 | }
|
455 | else if (char === '/') {
|
456 | this.delegate.beginAttributeValue(false);
|
457 | this.delegate.finishAttributeValue();
|
458 | this.consume();
|
459 | this.transitionTo("selfClosingStartTag" /* selfClosingStartTag */);
|
460 | }
|
461 | else if (char === '=') {
|
462 | this.transitionTo("beforeAttributeValue" /* beforeAttributeValue */);
|
463 | this.consume();
|
464 | }
|
465 | else if (char === '>') {
|
466 | this.delegate.beginAttributeValue(false);
|
467 | this.delegate.finishAttributeValue();
|
468 | this.consume();
|
469 | this.delegate.finishTag();
|
470 | this.transitionTo("beforeData" /* beforeData */);
|
471 | }
|
472 | else if (char === '"' || char === "'" || char === '<') {
|
473 | this.delegate.reportSyntaxError(char + ' is not a valid character within attribute names');
|
474 | this.consume();
|
475 | this.delegate.appendToAttributeName(char);
|
476 | }
|
477 | else {
|
478 | this.consume();
|
479 | this.delegate.appendToAttributeName(char);
|
480 | }
|
481 | },
|
482 | afterAttributeName: function () {
|
483 | var char = this.peek();
|
484 | if (isSpace(char)) {
|
485 | this.consume();
|
486 | return;
|
487 | }
|
488 | else if (char === '/') {
|
489 | this.delegate.beginAttributeValue(false);
|
490 | this.delegate.finishAttributeValue();
|
491 | this.consume();
|
492 | this.transitionTo("selfClosingStartTag" /* selfClosingStartTag */);
|
493 | }
|
494 | else if (char === '=') {
|
495 | this.consume();
|
496 | this.transitionTo("beforeAttributeValue" /* beforeAttributeValue */);
|
497 | }
|
498 | else if (char === '>') {
|
499 | this.delegate.beginAttributeValue(false);
|
500 | this.delegate.finishAttributeValue();
|
501 | this.consume();
|
502 | this.delegate.finishTag();
|
503 | this.transitionTo("beforeData" /* beforeData */);
|
504 | }
|
505 | else {
|
506 | this.delegate.beginAttributeValue(false);
|
507 | this.delegate.finishAttributeValue();
|
508 | this.transitionTo("attributeName" /* attributeName */);
|
509 | this.delegate.beginAttribute();
|
510 | this.consume();
|
511 | this.delegate.appendToAttributeName(char);
|
512 | }
|
513 | },
|
514 | beforeAttributeValue: function () {
|
515 | var char = this.peek();
|
516 | if (isSpace(char)) {
|
517 | this.consume();
|
518 | }
|
519 | else if (char === '"') {
|
520 | this.transitionTo("attributeValueDoubleQuoted" /* attributeValueDoubleQuoted */);
|
521 | this.delegate.beginAttributeValue(true);
|
522 | this.consume();
|
523 | }
|
524 | else if (char === "'") {
|
525 | this.transitionTo("attributeValueSingleQuoted" /* attributeValueSingleQuoted */);
|
526 | this.delegate.beginAttributeValue(true);
|
527 | this.consume();
|
528 | }
|
529 | else if (char === '>') {
|
530 | this.delegate.beginAttributeValue(false);
|
531 | this.delegate.finishAttributeValue();
|
532 | this.consume();
|
533 | this.delegate.finishTag();
|
534 | this.transitionTo("beforeData" /* beforeData */);
|
535 | }
|
536 | else {
|
537 | this.transitionTo("attributeValueUnquoted" /* attributeValueUnquoted */);
|
538 | this.delegate.beginAttributeValue(false);
|
539 | this.consume();
|
540 | this.delegate.appendToAttributeValue(char);
|
541 | }
|
542 | },
|
543 | attributeValueDoubleQuoted: function () {
|
544 | var char = this.consume();
|
545 | if (char === '"') {
|
546 | this.delegate.finishAttributeValue();
|
547 | this.transitionTo("afterAttributeValueQuoted" /* afterAttributeValueQuoted */);
|
548 | }
|
549 | else if (char === '&') {
|
550 | this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');
|
551 | }
|
552 | else {
|
553 | this.delegate.appendToAttributeValue(char);
|
554 | }
|
555 | },
|
556 | attributeValueSingleQuoted: function () {
|
557 | var char = this.consume();
|
558 | if (char === "'") {
|
559 | this.delegate.finishAttributeValue();
|
560 | this.transitionTo("afterAttributeValueQuoted" /* afterAttributeValueQuoted */);
|
561 | }
|
562 | else if (char === '&') {
|
563 | this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');
|
564 | }
|
565 | else {
|
566 | this.delegate.appendToAttributeValue(char);
|
567 | }
|
568 | },
|
569 | attributeValueUnquoted: function () {
|
570 | var char = this.peek();
|
571 | if (isSpace(char)) {
|
572 | this.delegate.finishAttributeValue();
|
573 | this.consume();
|
574 | this.transitionTo("beforeAttributeName" /* beforeAttributeName */);
|
575 | }
|
576 | else if (char === '/') {
|
577 | this.delegate.finishAttributeValue();
|
578 | this.consume();
|
579 | this.transitionTo("selfClosingStartTag" /* selfClosingStartTag */);
|
580 | }
|
581 | else if (char === '&') {
|
582 | this.consume();
|
583 | this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');
|
584 | }
|
585 | else if (char === '>') {
|
586 | this.delegate.finishAttributeValue();
|
587 | this.consume();
|
588 | this.delegate.finishTag();
|
589 | this.transitionTo("beforeData" /* beforeData */);
|
590 | }
|
591 | else {
|
592 | this.consume();
|
593 | this.delegate.appendToAttributeValue(char);
|
594 | }
|
595 | },
|
596 | afterAttributeValueQuoted: function () {
|
597 | var char = this.peek();
|
598 | if (isSpace(char)) {
|
599 | this.consume();
|
600 | this.transitionTo("beforeAttributeName" /* beforeAttributeName */);
|
601 | }
|
602 | else if (char === '/') {
|
603 | this.consume();
|
604 | this.transitionTo("selfClosingStartTag" /* selfClosingStartTag */);
|
605 | }
|
606 | else if (char === '>') {
|
607 | this.consume();
|
608 | this.delegate.finishTag();
|
609 | this.transitionTo("beforeData" /* beforeData */);
|
610 | }
|
611 | else {
|
612 | this.transitionTo("beforeAttributeName" /* beforeAttributeName */);
|
613 | }
|
614 | },
|
615 | selfClosingStartTag: function () {
|
616 | var char = this.peek();
|
617 | if (char === '>') {
|
618 | this.consume();
|
619 | this.delegate.markTagAsSelfClosing();
|
620 | this.delegate.finishTag();
|
621 | this.transitionTo("beforeData" /* beforeData */);
|
622 | }
|
623 | else {
|
624 | this.transitionTo("beforeAttributeName" /* beforeAttributeName */);
|
625 | }
|
626 | },
|
627 | endTagOpen: function () {
|
628 | var char = this.consume();
|
629 | if (char === '@' || char === ':' || isAlpha(char)) {
|
630 | this.transitionTo("endTagName" /* endTagName */);
|
631 | this.tagNameBuffer = '';
|
632 | this.delegate.beginEndTag();
|
633 | this.appendToTagName(char);
|
634 | }
|
635 | }
|
636 | };
|
637 | this.reset();
|
638 | }
|
639 | EventedTokenizer.prototype.reset = function () {
|
640 | this.transitionTo("beforeData" /* beforeData */);
|
641 | this.input = '';
|
642 | this.tagNameBuffer = '';
|
643 | this.index = 0;
|
644 | this.line = 1;
|
645 | this.column = 0;
|
646 | this.delegate.reset();
|
647 | };
|
648 | EventedTokenizer.prototype.transitionTo = function (state) {
|
649 | this.state = state;
|
650 | };
|
651 | EventedTokenizer.prototype.tokenize = function (input) {
|
652 | this.reset();
|
653 | this.tokenizePart(input);
|
654 | this.tokenizeEOF();
|
655 | };
|
656 | EventedTokenizer.prototype.tokenizePart = function (input) {
|
657 | this.input += preprocessInput(input);
|
658 | while (this.index < this.input.length) {
|
659 | var handler = this.states[this.state];
|
660 | if (handler !== undefined) {
|
661 | handler.call(this);
|
662 | }
|
663 | else {
|
664 | throw new Error("unhandled state " + this.state);
|
665 | }
|
666 | }
|
667 | };
|
668 | EventedTokenizer.prototype.tokenizeEOF = function () {
|
669 | this.flushData();
|
670 | };
|
671 | EventedTokenizer.prototype.flushData = function () {
|
672 | if (this.state === 'data') {
|
673 | this.delegate.finishData();
|
674 | this.transitionTo("beforeData" /* beforeData */);
|
675 | }
|
676 | };
|
677 | EventedTokenizer.prototype.peek = function () {
|
678 | return this.input.charAt(this.index);
|
679 | };
|
680 | EventedTokenizer.prototype.consume = function () {
|
681 | var char = this.peek();
|
682 | this.index++;
|
683 | if (char === '\n') {
|
684 | this.line++;
|
685 | this.column = 0;
|
686 | }
|
687 | else {
|
688 | this.column++;
|
689 | }
|
690 | return char;
|
691 | };
|
692 | EventedTokenizer.prototype.consumeCharRef = function () {
|
693 | var endIndex = this.input.indexOf(';', this.index);
|
694 | if (endIndex === -1) {
|
695 | return;
|
696 | }
|
697 | var entity = this.input.slice(this.index, endIndex);
|
698 | var chars = this.entityParser.parse(entity);
|
699 | if (chars) {
|
700 | var count = entity.length;
|
701 | // consume the entity chars
|
702 | while (count) {
|
703 | this.consume();
|
704 | count--;
|
705 | }
|
706 | // consume the `;`
|
707 | this.consume();
|
708 | return chars;
|
709 | }
|
710 | };
|
711 | EventedTokenizer.prototype.markTagStart = function () {
|
712 | this.delegate.tagOpen();
|
713 | };
|
714 | EventedTokenizer.prototype.appendToTagName = function (char) {
|
715 | this.tagNameBuffer += char;
|
716 | this.delegate.appendToTagName(char);
|
717 | };
|
718 | EventedTokenizer.prototype.isIgnoredEndTag = function () {
|
719 | var tag = this.tagNameBuffer;
|
720 | return (tag === 'title' && this.input.substring(this.index, this.index + 8) !== '</title>') ||
|
721 | (tag === 'style' && this.input.substring(this.index, this.index + 8) !== '</style>') ||
|
722 | (tag === 'script' && this.input.substring(this.index, this.index + 9) !== '</script>');
|
723 | };
|
724 | return EventedTokenizer;
|
725 | }());
|
726 |
|
727 | var Tokenizer = /** @class */ (function () {
|
728 | function Tokenizer(entityParser, options) {
|
729 | if (options === void 0) { options = {}; }
|
730 | this.options = options;
|
731 | this.token = null;
|
732 | this.startLine = 1;
|
733 | this.startColumn = 0;
|
734 | this.tokens = [];
|
735 | this.tokenizer = new EventedTokenizer(this, entityParser, options.mode);
|
736 | this._currentAttribute = undefined;
|
737 | }
|
738 | Tokenizer.prototype.tokenize = function (input) {
|
739 | this.tokens = [];
|
740 | this.tokenizer.tokenize(input);
|
741 | return this.tokens;
|
742 | };
|
743 | Tokenizer.prototype.tokenizePart = function (input) {
|
744 | this.tokens = [];
|
745 | this.tokenizer.tokenizePart(input);
|
746 | return this.tokens;
|
747 | };
|
748 | Tokenizer.prototype.tokenizeEOF = function () {
|
749 | this.tokens = [];
|
750 | this.tokenizer.tokenizeEOF();
|
751 | return this.tokens[0];
|
752 | };
|
753 | Tokenizer.prototype.reset = function () {
|
754 | this.token = null;
|
755 | this.startLine = 1;
|
756 | this.startColumn = 0;
|
757 | };
|
758 | Tokenizer.prototype.current = function () {
|
759 | var token = this.token;
|
760 | if (token === null) {
|
761 | throw new Error('token was unexpectedly null');
|
762 | }
|
763 | if (arguments.length === 0) {
|
764 | return token;
|
765 | }
|
766 | for (var i = 0; i < arguments.length; i++) {
|
767 | if (token.type === arguments[i]) {
|
768 | return token;
|
769 | }
|
770 | }
|
771 | throw new Error("token type was unexpectedly " + token.type);
|
772 | };
|
773 | Tokenizer.prototype.push = function (token) {
|
774 | this.token = token;
|
775 | this.tokens.push(token);
|
776 | };
|
777 | Tokenizer.prototype.currentAttribute = function () {
|
778 | return this._currentAttribute;
|
779 | };
|
780 | Tokenizer.prototype.addLocInfo = function () {
|
781 | if (this.options.loc) {
|
782 | this.current().loc = {
|
783 | start: {
|
784 | line: this.startLine,
|
785 | column: this.startColumn
|
786 | },
|
787 | end: {
|
788 | line: this.tokenizer.line,
|
789 | column: this.tokenizer.column
|
790 | }
|
791 | };
|
792 | }
|
793 | this.startLine = this.tokenizer.line;
|
794 | this.startColumn = this.tokenizer.column;
|
795 | };
|
796 | // Data
|
797 | Tokenizer.prototype.beginDoctype = function () {
|
798 | this.push({
|
799 | type: "Doctype" /* Doctype */,
|
800 | name: '',
|
801 | });
|
802 | };
|
803 | Tokenizer.prototype.appendToDoctypeName = function (char) {
|
804 | this.current("Doctype" /* Doctype */).name += char;
|
805 | };
|
806 | Tokenizer.prototype.appendToDoctypePublicIdentifier = function (char) {
|
807 | var doctype = this.current("Doctype" /* Doctype */);
|
808 | if (doctype.publicIdentifier === undefined) {
|
809 | doctype.publicIdentifier = char;
|
810 | }
|
811 | else {
|
812 | doctype.publicIdentifier += char;
|
813 | }
|
814 | };
|
815 | Tokenizer.prototype.appendToDoctypeSystemIdentifier = function (char) {
|
816 | var doctype = this.current("Doctype" /* Doctype */);
|
817 | if (doctype.systemIdentifier === undefined) {
|
818 | doctype.systemIdentifier = char;
|
819 | }
|
820 | else {
|
821 | doctype.systemIdentifier += char;
|
822 | }
|
823 | };
|
824 | Tokenizer.prototype.endDoctype = function () {
|
825 | this.addLocInfo();
|
826 | };
|
827 | Tokenizer.prototype.beginData = function () {
|
828 | this.push({
|
829 | type: "Chars" /* Chars */,
|
830 | chars: ''
|
831 | });
|
832 | };
|
833 | Tokenizer.prototype.appendToData = function (char) {
|
834 | this.current("Chars" /* Chars */).chars += char;
|
835 | };
|
836 | Tokenizer.prototype.finishData = function () {
|
837 | this.addLocInfo();
|
838 | };
|
839 | // Comment
|
840 | Tokenizer.prototype.beginComment = function () {
|
841 | this.push({
|
842 | type: "Comment" /* Comment */,
|
843 | chars: ''
|
844 | });
|
845 | };
|
846 | Tokenizer.prototype.appendToCommentData = function (char) {
|
847 | this.current("Comment" /* Comment */).chars += char;
|
848 | };
|
849 | Tokenizer.prototype.finishComment = function () {
|
850 | this.addLocInfo();
|
851 | };
|
852 | // Tags - basic
|
853 | Tokenizer.prototype.tagOpen = function () { };
|
854 | Tokenizer.prototype.beginStartTag = function () {
|
855 | this.push({
|
856 | type: "StartTag" /* StartTag */,
|
857 | tagName: '',
|
858 | attributes: [],
|
859 | selfClosing: false
|
860 | });
|
861 | };
|
862 | Tokenizer.prototype.beginEndTag = function () {
|
863 | this.push({
|
864 | type: "EndTag" /* EndTag */,
|
865 | tagName: ''
|
866 | });
|
867 | };
|
868 | Tokenizer.prototype.finishTag = function () {
|
869 | this.addLocInfo();
|
870 | };
|
871 | Tokenizer.prototype.markTagAsSelfClosing = function () {
|
872 | this.current("StartTag" /* StartTag */).selfClosing = true;
|
873 | };
|
874 | // Tags - name
|
875 | Tokenizer.prototype.appendToTagName = function (char) {
|
876 | this.current("StartTag" /* StartTag */, "EndTag" /* EndTag */).tagName += char;
|
877 | };
|
878 | // Tags - attributes
|
879 | Tokenizer.prototype.beginAttribute = function () {
|
880 | this._currentAttribute = ['', '', false];
|
881 | };
|
882 | Tokenizer.prototype.appendToAttributeName = function (char) {
|
883 | this.currentAttribute()[0] += char;
|
884 | };
|
885 | Tokenizer.prototype.beginAttributeValue = function (isQuoted) {
|
886 | this.currentAttribute()[2] = isQuoted;
|
887 | };
|
888 | Tokenizer.prototype.appendToAttributeValue = function (char) {
|
889 | this.currentAttribute()[1] += char;
|
890 | };
|
891 | Tokenizer.prototype.finishAttributeValue = function () {
|
892 | this.current("StartTag" /* StartTag */).attributes.push(this._currentAttribute);
|
893 | };
|
894 | Tokenizer.prototype.reportSyntaxError = function (message) {
|
895 | this.current().syntaxError = message;
|
896 | };
|
897 | return Tokenizer;
|
898 | }());
|
899 |
|
900 | function tokenize(input, options) {
|
901 | var tokenizer = new Tokenizer(new EntityParser(namedCharRefs), options);
|
902 | return tokenizer.tokenize(input);
|
903 | }
|
904 |
|
905 | exports.HTML5NamedCharRefs = namedCharRefs;
|
906 | exports.EntityParser = EntityParser;
|
907 | exports.EventedTokenizer = EventedTokenizer;
|
908 | exports.Tokenizer = Tokenizer;
|
909 | exports.tokenize = tokenize;
|
910 |
|
911 | Object.defineProperty(exports, '__esModule', { value: true });
|
912 |
|
913 | })));
|
914 | //# sourceMappingURL=simple-html-tokenizer.js.map |
\ | No newline at end of file |