swc_ecma_parser 39.1.1

Feature-complete es2019 parser.
Documentation
macro_rules! xhtml {
  (
      $(
          $i:ident : $s:expr,
      )*
  ) => {
      pub(super) fn xhtml(s: &str) -> Option<char> {
          match s{
              $(stringify!($i) => Some($s),)*
              _ => None,
          }
      }
  };
}

xhtml!(
  quot: '\u{0022}',
  amp: '&',
  apos: '\u{0027}',
  lt: '<',
  gt: '>',
  nbsp: '\u{00A0}',
  iexcl: '\u{00A1}',
  cent: '\u{00A2}',
  pound: '\u{00A3}',
  curren: '\u{00A4}',
  yen: '\u{00A5}',
  brvbar: '\u{00A6}',
  sect: '\u{00A7}',
  uml: '\u{00A8}',
  copy: '\u{00A9}',
  ordf: '\u{00AA}',
  laquo: '\u{00AB}',
  not: '\u{00AC}',
  shy: '\u{00AD}',
  reg: '\u{00AE}',
  macr: '\u{00AF}',
  deg: '\u{00B0}',
  plusmn: '\u{00B1}',
  sup2: '\u{00B2}',
  sup3: '\u{00B3}',
  acute: '\u{00B4}',
  micro: '\u{00B5}',
  para: '\u{00B6}',
  middot: '\u{00B7}',
  cedil: '\u{00B8}',
  sup1: '\u{00B9}',
  ordm: '\u{00BA}',
  raquo: '\u{00BB}',
  frac14: '\u{00BC}',
  frac12: '\u{00BD}',
  frac34: '\u{00BE}',
  iquest: '\u{00BF}',
  Agrave: '\u{00C0}',
  Aacute: '\u{00C1}',
  Acirc: '\u{00C2}',
  Atilde: '\u{00C3}',
  Auml: '\u{00C4}',
  Aring: '\u{00C5}',
  AElig: '\u{00C6}',
  Ccedil: '\u{00C7}',
  Egrave: '\u{00C8}',
  Eacute: '\u{00C9}',
  Ecirc: '\u{00CA}',
  Euml: '\u{00CB}',
  Igrave: '\u{00CC}',
  Iacute: '\u{00CD}',
  Icirc: '\u{00CE}',
  Iuml: '\u{00CF}',
  ETH: '\u{00D0}',
  Ntilde: '\u{00D1}',
  Ograve: '\u{00D2}',
  Oacute: '\u{00D3}',
  Ocirc: '\u{00D4}',
  Otilde: '\u{00D5}',
  Ouml: '\u{00D6}',
  times: '\u{00D7}',
  Oslash: '\u{00D8}',
  Ugrave: '\u{00D9}',
  Uacute: '\u{00DA}',
  Ucirc: '\u{00DB}',
  Uuml: '\u{00DC}',
  Yacute: '\u{00DD}',
  THORN: '\u{00DE}',
  szlig: '\u{00DF}',
  agrave: '\u{00E0}',
  aacute: '\u{00E1}',
  acirc: '\u{00E2}',
  atilde: '\u{00E3}',
  auml: '\u{00E4}',
  aring: '\u{00E5}',
  aelig: '\u{00E6}',
  ccedil: '\u{00E7}',
  egrave: '\u{00E8}',
  eacute: '\u{00E9}',
  ecirc: '\u{00EA}',
  euml: '\u{00EB}',
  igrave: '\u{00EC}',
  iacute: '\u{00ED}',
  icirc: '\u{00EE}',
  iuml: '\u{00EF}',
  eth: '\u{00F0}',
  ntilde: '\u{00F1}',
  ograve: '\u{00F2}',
  oacute: '\u{00F3}',
  ocirc: '\u{00F4}',
  otilde: '\u{00F5}',
  ouml: '\u{00F6}',
  divide: '\u{00F7}',
  oslash: '\u{00F8}',
  ugrave: '\u{00F9}',
  uacute: '\u{00FA}',
  ucirc: '\u{00FB}',
  uuml: '\u{00FC}',
  yacute: '\u{00FD}',
  thorn: '\u{00FE}',
  yuml: '\u{00FF}',
  OElig: '\u{0152}',
  oelig: '\u{0153}',
  Scaron: '\u{0160}',
  scaron: '\u{0161}',
  Yuml: '\u{0178}',
  fnof: '\u{0192}',
  circ: '\u{02C6}',
  tilde: '\u{02DC}',
  Alpha: '\u{0391}',
  Beta: '\u{0392}',
  Gamma: '\u{0393}',
  Delta: '\u{0394}',
  Epsilon: '\u{0395}',
  Zeta: '\u{0396}',
  Eta: '\u{0397}',
  Theta: '\u{0398}',
  Iota: '\u{0399}',
  Kappa: '\u{039A}',
  Lambda: '\u{039B}',
  Mu: '\u{039C}',
  Nu: '\u{039D}',
  Xi: '\u{039E}',
  Omicron: '\u{039F}',
  Pi: '\u{03A0}',
  Rho: '\u{03A1}',
  Sigma: '\u{03A3}',
  Tau: '\u{03A4}',
  Upsilon: '\u{03A5}',
  Phi: '\u{03A6}',
  Chi: '\u{03A7}',
  Psi: '\u{03A8}',
  Omega: '\u{03A9}',
  alpha: '\u{03B1}',
  beta: '\u{03B2}',
  gamma: '\u{03B3}',
  delta: '\u{03B4}',
  epsilon: '\u{03B5}',
  zeta: '\u{03B6}',
  eta: '\u{03B7}',
  theta: '\u{03B8}',
  iota: '\u{03B9}',
  kappa: '\u{03BA}',
  lambda: '\u{03BB}',
  mu: '\u{03BC}',
  nu: '\u{03BD}',
  xi: '\u{03BE}',
  omicron: '\u{03BF}',
  pi: '\u{03C0}',
  rho: '\u{03C1}',
  sigmaf: '\u{03C2}',
  sigma: '\u{03C3}',
  tau: '\u{03C4}',
  upsilon: '\u{03C5}',
  phi: '\u{03C6}',
  chi: '\u{03C7}',
  psi: '\u{03C8}',
  omega: '\u{03C9}',
  thetasym: '\u{03D1}',
  upsih: '\u{03D2}',
  piv: '\u{03D6}',
  ensp: '\u{2002}',
  emsp: '\u{2003}',
  thinsp: '\u{2009}',
  zwnj: '\u{200C}',
  zwj: '\u{200D}',
  lrm: '\u{200E}',
  rlm: '\u{200F}',
  ndash: '\u{2013}',
  mdash: '\u{2014}',
  lsquo: '\u{2018}',
  rsquo: '\u{2019}',
  sbquo: '\u{201A}',
  ldquo: '\u{201C}',
  rdquo: '\u{201D}',
  bdquo: '\u{201E}',
  dagger: '\u{2020}',
  Dagger: '\u{2021}',
  bull: '\u{2022}',
  hellip: '\u{2026}',
  permil: '\u{2030}',
  prime: '\u{2032}',
  Prime: '\u{2033}',
  lsaquo: '\u{2039}',
  rsaquo: '\u{203A}',
  oline: '\u{203E}',
  frasl: '\u{2044}',
  euro: '\u{20AC}',
  image: '\u{2111}',
  weierp: '\u{2118}',
  real: '\u{211C}',
  trade: '\u{2122}',
  alefsym: '\u{2135}',
  larr: '\u{2190}',
  uarr: '\u{2191}',
  rarr: '\u{2192}',
  darr: '\u{2193}',
  harr: '\u{2194}',
  crarr: '\u{21B5}',
  lArr: '\u{21D0}',
  uArr: '\u{21D1}',
  rArr: '\u{21D2}',
  dArr: '\u{21D3}',
  hArr: '\u{21D4}',
  forall: '\u{2200}',
  part: '\u{2202}',
  exist: '\u{2203}',
  empty: '\u{2205}',
  nabla: '\u{2207}',
  isin: '\u{2208}',
  notin: '\u{2209}',
  ni: '\u{220B}',
  prod: '\u{220F}',
  sum: '\u{2211}',
  minus: '\u{2212}',
  lowast: '\u{2217}',
  radic: '\u{221A}',
  prop: '\u{221D}',
  infin: '\u{221E}',
  ang: '\u{2220}',
  and: '\u{2227}',
  or: '\u{2228}',
  cap: '\u{2229}',
  cup: '\u{222A}',
  int: '\u{222B}',
  there4: '\u{2234}',
  sim: '\u{223C}',
  cong: '\u{2245}',
  asymp: '\u{2248}',
  ne: '\u{2260}',
  equiv: '\u{2261}',
  le: '\u{2264}',
  ge: '\u{2265}',
  sub: '\u{2282}',
  sup: '\u{2283}',
  nsub: '\u{2284}',
  sube: '\u{2286}',
  supe: '\u{2287}',
  oplus: '\u{2295}',
  otimes: '\u{2297}',
  perp: '\u{22A5}',
  sdot: '\u{22C5}',
  lceil: '\u{2308}',
  rceil: '\u{2309}',
  lfloor: '\u{230A}',
  rfloor: '\u{230B}',
  lang: '\u{2329}',
  rang: '\u{232A}',
  loz: '\u{25CA}',
  spades: '\u{2660}',
  clubs: '\u{2663}',
  hearts: '\u{2665}',
  diams: '\u{2666}',
);