package js_lexer

var tokenToString = map[T]string{
	TEndOfFile:   "end of file",
	TSyntaxError: "syntax error",
	THashbang:    "hashbang comment",

	// Literals
	TNoSubstitutionTemplateLiteral: "template literal",
	TNumericLiteral:                "number",
	TStringLiteral:                 "string",
	TBigIntegerLiteral:             "bigint",

	// Pseudo-literals
	TTemplateHead:   "template literal",
	TTemplateMiddle: "template literal",
	TTemplateTail:   "template literal",

	// Punctuation
	TAmpersand:                         "\"&\"",
	TAmpersandAmpersand:                "\"&&\"",
	TAsterisk:                          "\"*\"",
	TAsteriskAsterisk:                  "\"**\"",
	TAt:                                "\"@\"",
	TBar:                               "\"|\"",
	TBarBar:                            "\"||\"",
	TCaret:                             "\"^\"",
	TCloseBrace:                        "\"}\"",
	TCloseBracket:                      "\"]\"",
	TCloseParen:                        "\")\"",
	TColon:                             "\":\"",
	TComma:                             "\",\"",
	TDot:                               "\".\"",
	TDotDotDot:                         "\"...\"",
	TEqualsEquals:                      "\"==\"",
	TEqualsEqualsEquals:                "\"===\"",
	TEqualsGreaterThan:                 "\"=>\"",
	TExclamation:                       "\"!\"",
	TExclamationEquals:                 "\"!=\"",
	TExclamationEqualsEquals:           "\"!==\"",
	TGreaterThan:                       "\">\"",
	TGreaterThanEquals:                 "\">=\"",
	TGreaterThanGreaterThan:            "\">>\"",
	TGreaterThanGreaterThanGreaterThan: "\">>>\"",
	TLessThan:                          "\"<\"",
	TLessThanEquals:                    "\"<=\"",
	TLessThanLessThan:                  "\"<<\"",
	TMinus:                             "\"-\"",
	TMinusMinus:                        "\"--\"",
	TOpenBrace:                         "\"{\"",
	TOpenBracket:                       "\"[\"",
	TOpenParen:                         "\"(\"",
	TPercent:                           "\"%\"",
	TPlus:                              "\"+\"",
	TPlusPlus:                          "\"++\"",
	TQuestion:                          "\"?\"",
	TQuestionDot:                       "\"?.\"",
	TQuestionQuestion:                  "\"??\"",
	TSemicolon:                         "\";\"",
	TSlash:                             "\"/\"",
	TTilde:                             "\"~\"",

	// Assignments
	TAmpersandAmpersandEquals:                "\"&&=\"",
	TAmpersandEquals:                         "\"&=\"",
	TAsteriskAsteriskEquals:                  "\"**=\"",
	TAsteriskEquals:                          "\"*=\"",
	TBarBarEquals:                            "\"||=\"",
	TBarEquals:                               "\"|=\"",
	TCaretEquals:                             "\"^=\"",
	TEquals:                                  "\"=\"",
	TGreaterThanGreaterThanEquals:            "\">>=\"",
	TGreaterThanGreaterThanGreaterThanEquals: "\">>>=\"",
	TLessThanLessThanEquals:                  "\"<<=\"",
	TMinusEquals:                             "\"-=\"",
	TPercentEquals:                           "\"%=\"",
	TPlusEquals:                              "\"+=\"",
	TQuestionQuestionEquals:                  "\"??=\"",
	TSlashEquals:                             "\"/=\"",

	// Class-private fields and methods
	TPrivateIdentifier: "private identifier",

	// Identifiers
	TIdentifier:     "identifier",
	TEscapedKeyword: "escaped keyword",

	// Reserved words
	TBreak:      "\"break\"",
	TCase:       "\"case\"",
	TCatch:      "\"catch\"",
	TClass:      "\"class\"",
	TConst:      "\"const\"",
	TContinue:   "\"continue\"",
	TDebugger:   "\"debugger\"",
	TDefault:    "\"default\"",
	TDelete:     "\"delete\"",
	TDo:         "\"do\"",
	TElse:       "\"else\"",
	TEnum:       "\"enum\"",
	TExport:     "\"export\"",
	TExtends:    "\"extends\"",
	TFalse:      "\"false\"",
	TFinally:    "\"finally\"",
	TFor:        "\"for\"",
	TFunction:   "\"function\"",
	TIf:         "\"if\"",
	TImport:     "\"import\"",
	TIn:         "\"in\"",
	TInstanceof: "\"instanceof\"",
	TNew:        "\"new\"",
	TNull:       "\"null\"",
	TReturn:     "\"return\"",
	TSuper:      "\"super\"",
	TSwitch:     "\"switch\"",
	TThis:       "\"this\"",
	TThrow:      "\"throw\"",
	TTrue:       "\"true\"",
	TTry:        "\"try\"",
	TTypeof:     "\"typeof\"",
	TVar:        "\"var\"",
	TVoid:       "\"void\"",
	TWhile:      "\"while\"",
	TWith:       "\"with\"",
}

// This is from https://github.com/microsoft/TypeScript/blob/master/src/compiler/transformers/jsx.ts
var jsxEntity = map[string]rune{
	"quot":     0x0022,
	"amp":      0x0026,
	"apos":     0x0027,
	"lt":       0x003C,
	"gt":       0x003E,
	"nbsp":     0x00A0,
	"iexcl":    0x00A1,
	"cent":     0x00A2,
	"pound":    0x00A3,
	"curren":   0x00A4,
	"yen":      0x00A5,
	"brvbar":   0x00A6,
	"sect":     0x00A7,
	"uml":      0x00A8,
	"copy":     0x00A9,
	"ordf":     0x00AA,
	"laquo":    0x00AB,
	"not":      0x00AC,
	"shy":      0x00AD,
	"reg":      0x00AE,
	"macr":     0x00AF,
	"deg":      0x00B0,
	"plusmn":   0x00B1,
	"sup2":     0x00B2,
	"sup3":     0x00B3,
	"acute":    0x00B4,
	"micro":    0x00B5,
	"para":     0x00B6,
	"middot":   0x00B7,
	"cedil":    0x00B8,
	"sup1":     0x00B9,
	"ordm":     0x00BA,
	"raquo":    0x00BB,
	"frac14":   0x00BC,
	"frac12":   0x00BD,
	"frac34":   0x00BE,
	"iquest":   0x00BF,
	"Agrave":   0x00C0,
	"Aacute":   0x00C1,
	"Acirc":    0x00C2,
	"Atilde":   0x00C3,
	"Auml":     0x00C4,
	"Aring":    0x00C5,
	"AElig":    0x00C6,
	"Ccedil":   0x00C7,
	"Egrave":   0x00C8,
	"Eacute":   0x00C9,
	"Ecirc":    0x00CA,
	"Euml":     0x00CB,
	"Igrave":   0x00CC,
	"Iacute":   0x00CD,
	"Icirc":    0x00CE,
	"Iuml":     0x00CF,
	"ETH":      0x00D0,
	"Ntilde":   0x00D1,
	"Ograve":   0x00D2,
	"Oacute":   0x00D3,
	"Ocirc":    0x00D4,
	"Otilde":   0x00D5,
	"Ouml":     0x00D6,
	"times":    0x00D7,
	"Oslash":   0x00D8,
	"Ugrave":   0x00D9,
	"Uacute":   0x00DA,
	"Ucirc":    0x00DB,
	"Uuml":     0x00DC,
	"Yacute":   0x00DD,
	"THORN":    0x00DE,
	"szlig":    0x00DF,
	"agrave":   0x00E0,
	"aacute":   0x00E1,
	"acirc":    0x00E2,
	"atilde":   0x00E3,
	"auml":     0x00E4,
	"aring":    0x00E5,
	"aelig":    0x00E6,
	"ccedil":   0x00E7,
	"egrave":   0x00E8,
	"eacute":   0x00E9,
	"ecirc":    0x00EA,
	"euml":     0x00EB,
	"igrave":   0x00EC,
	"iacute":   0x00ED,
	"icirc":    0x00EE,
	"iuml":     0x00EF,
	"eth":      0x00F0,
	"ntilde":   0x00F1,
	"ograve":   0x00F2,
	"oacute":   0x00F3,
	"ocirc":    0x00F4,
	"otilde":   0x00F5,
	"ouml":     0x00F6,
	"divide":   0x00F7,
	"oslash":   0x00F8,
	"ugrave":   0x00F9,
	"uacute":   0x00FA,
	"ucirc":    0x00FB,
	"uuml":     0x00FC,
	"yacute":   0x00FD,
	"thorn":    0x00FE,
	"yuml":     0x00FF,
	"OElig":    0x0152,
	"oelig":    0x0153,
	"Scaron":   0x0160,
	"scaron":   0x0161,
	"Yuml":     0x0178,
	"fnof":     0x0192,
	"circ":     0x02C6,
	"tilde":    0x02DC,
	"Alpha":    0x0391,
	"Beta":     0x0392,
	"Gamma":    0x0393,
	"Delta":    0x0394,
	"Epsilon":  0x0395,
	"Zeta":     0x0396,
	"Eta":      0x0397,
	"Theta":    0x0398,
	"Iota":     0x0399,
	"Kappa":    0x039A,
	"Lambda":   0x039B,
	"Mu":       0x039C,
	"Nu":       0x039D,
	"Xi":       0x039E,
	"Omicron":  0x039F,
	"Pi":       0x03A0,
	"Rho":      0x03A1,
	"Sigma":    0x03A3,
	"Tau":      0x03A4,
	"Upsilon":  0x03A5,
	"Phi":      0x03A6,
	"Chi":      0x03A7,
	"Psi":      0x03A8,
	"Omega":    0x03A9,
	"alpha":    0x03B1,
	"beta":     0x03B2,
	"gamma":    0x03B3,
	"delta":    0x03B4,
	"epsilon":  0x03B5,
	"zeta":     0x03B6,
	"eta":      0x03B7,
	"theta":    0x03B8,
	"iota":     0x03B9,
	"kappa":    0x03BA,
	"lambda":   0x03BB,
	"mu":       0x03BC,
	"nu":       0x03BD,
	"xi":       0x03BE,
	"omicron":  0x03BF,
	"pi":       0x03C0,
	"rho":      0x03C1,
	"sigmaf":   0x03C2,
	"sigma":    0x03C3,
	"tau":      0x03C4,
	"upsilon":  0x03C5,
	"phi":      0x03C6,
	"chi":      0x03C7,
	"psi":      0x03C8,
	"omega":    0x03C9,
	"thetasym": 0x03D1,
	"upsih":    0x03D2,
	"piv":      0x03D6,
	"ensp":     0x2002,
	"emsp":     0x2003,
	"thinsp":   0x2009,
	"zwnj":     0x200C,
	"zwj":      0x200D,
	"lrm":      0x200E,
	"rlm":      0x200F,
	"ndash":    0x2013,
	"mdash":    0x2014,
	"lsquo":    0x2018,
	"rsquo":    0x2019,
	"sbquo":    0x201A,
	"ldquo":    0x201C,
	"rdquo":    0x201D,
	"bdquo":    0x201E,
	"dagger":   0x2020,
	"Dagger":   0x2021,
	"bull":     0x2022,
	"hellip":   0x2026,
	"permil":   0x2030,
	"prime":    0x2032,
	"Prime":    0x2033,
	"lsaquo":   0x2039,
	"rsaquo":   0x203A,
	"oline":    0x203E,
	"frasl":    0x2044,
	"euro":     0x20AC,
	"image":    0x2111,
	"weierp":   0x2118,
	"real":     0x211C,
	"trade":    0x2122,
	"alefsym":  0x2135,
	"larr":     0x2190,
	"uarr":     0x2191,
	"rarr":     0x2192,
	"darr":     0x2193,
	"harr":     0x2194,
	"crarr":    0x21B5,
	"lArr":     0x21D0,
	"uArr":     0x21D1,
	"rArr":     0x21D2,
	"dArr":     0x21D3,
	"hArr":     0x21D4,
	"forall":   0x2200,
	"part":     0x2202,
	"exist":    0x2203,
	"empty":    0x2205,
	"nabla":    0x2207,
	"isin":     0x2208,
	"notin":    0x2209,
	"ni":       0x220B,
	"prod":     0x220F,
	"sum":      0x2211,
	"minus":    0x2212,
	"lowast":   0x2217,
	"radic":    0x221A,
	"prop":     0x221D,
	"infin":    0x221E,
	"ang":      0x2220,
	"and":      0x2227,
	"or":       0x2228,
	"cap":      0x2229,
	"cup":      0x222A,
	"int":      0x222B,
	"there4":   0x2234,
	"sim":      0x223C,
	"cong":     0x2245,
	"asymp":    0x2248,
	"ne":       0x2260,
	"equiv":    0x2261,
	"le":       0x2264,
	"ge":       0x2265,
	"sub":      0x2282,
	"sup":      0x2283,
	"nsub":     0x2284,
	"sube":     0x2286,
	"supe":     0x2287,
	"oplus":    0x2295,
	"otimes":   0x2297,
	"perp":     0x22A5,
	"sdot":     0x22C5,
	"lceil":    0x2308,
	"rceil":    0x2309,
	"lfloor":   0x230A,
	"rfloor":   0x230B,
	"lang":     0x2329,
	"rang":     0x232A,
	"loz":      0x25CA,
	"spades":   0x2660,
	"clubs":    0x2663,
	"hearts":   0x2665,
	"diams":    0x2666,
}
