11cb0ef41Sopenharmony_ci'use strict'
21cb0ef41Sopenharmony_ci
31cb0ef41Sopenharmony_ci/**
41cb0ef41Sopenharmony_ci * @see https://encoding.spec.whatwg.org/#concept-encoding-get
51cb0ef41Sopenharmony_ci * @param {string|undefined} label
61cb0ef41Sopenharmony_ci */
71cb0ef41Sopenharmony_cifunction getEncoding (label) {
81cb0ef41Sopenharmony_ci  if (!label) {
91cb0ef41Sopenharmony_ci    return 'failure'
101cb0ef41Sopenharmony_ci  }
111cb0ef41Sopenharmony_ci
121cb0ef41Sopenharmony_ci  // 1. Remove any leading and trailing ASCII whitespace from label.
131cb0ef41Sopenharmony_ci  // 2. If label is an ASCII case-insensitive match for any of the
141cb0ef41Sopenharmony_ci  //    labels listed in the table below, then return the
151cb0ef41Sopenharmony_ci  //    corresponding encoding; otherwise return failure.
161cb0ef41Sopenharmony_ci  switch (label.trim().toLowerCase()) {
171cb0ef41Sopenharmony_ci    case 'unicode-1-1-utf-8':
181cb0ef41Sopenharmony_ci    case 'unicode11utf8':
191cb0ef41Sopenharmony_ci    case 'unicode20utf8':
201cb0ef41Sopenharmony_ci    case 'utf-8':
211cb0ef41Sopenharmony_ci    case 'utf8':
221cb0ef41Sopenharmony_ci    case 'x-unicode20utf8':
231cb0ef41Sopenharmony_ci      return 'UTF-8'
241cb0ef41Sopenharmony_ci    case '866':
251cb0ef41Sopenharmony_ci    case 'cp866':
261cb0ef41Sopenharmony_ci    case 'csibm866':
271cb0ef41Sopenharmony_ci    case 'ibm866':
281cb0ef41Sopenharmony_ci      return 'IBM866'
291cb0ef41Sopenharmony_ci    case 'csisolatin2':
301cb0ef41Sopenharmony_ci    case 'iso-8859-2':
311cb0ef41Sopenharmony_ci    case 'iso-ir-101':
321cb0ef41Sopenharmony_ci    case 'iso8859-2':
331cb0ef41Sopenharmony_ci    case 'iso88592':
341cb0ef41Sopenharmony_ci    case 'iso_8859-2':
351cb0ef41Sopenharmony_ci    case 'iso_8859-2:1987':
361cb0ef41Sopenharmony_ci    case 'l2':
371cb0ef41Sopenharmony_ci    case 'latin2':
381cb0ef41Sopenharmony_ci      return 'ISO-8859-2'
391cb0ef41Sopenharmony_ci    case 'csisolatin3':
401cb0ef41Sopenharmony_ci    case 'iso-8859-3':
411cb0ef41Sopenharmony_ci    case 'iso-ir-109':
421cb0ef41Sopenharmony_ci    case 'iso8859-3':
431cb0ef41Sopenharmony_ci    case 'iso88593':
441cb0ef41Sopenharmony_ci    case 'iso_8859-3':
451cb0ef41Sopenharmony_ci    case 'iso_8859-3:1988':
461cb0ef41Sopenharmony_ci    case 'l3':
471cb0ef41Sopenharmony_ci    case 'latin3':
481cb0ef41Sopenharmony_ci      return 'ISO-8859-3'
491cb0ef41Sopenharmony_ci    case 'csisolatin4':
501cb0ef41Sopenharmony_ci    case 'iso-8859-4':
511cb0ef41Sopenharmony_ci    case 'iso-ir-110':
521cb0ef41Sopenharmony_ci    case 'iso8859-4':
531cb0ef41Sopenharmony_ci    case 'iso88594':
541cb0ef41Sopenharmony_ci    case 'iso_8859-4':
551cb0ef41Sopenharmony_ci    case 'iso_8859-4:1988':
561cb0ef41Sopenharmony_ci    case 'l4':
571cb0ef41Sopenharmony_ci    case 'latin4':
581cb0ef41Sopenharmony_ci      return 'ISO-8859-4'
591cb0ef41Sopenharmony_ci    case 'csisolatincyrillic':
601cb0ef41Sopenharmony_ci    case 'cyrillic':
611cb0ef41Sopenharmony_ci    case 'iso-8859-5':
621cb0ef41Sopenharmony_ci    case 'iso-ir-144':
631cb0ef41Sopenharmony_ci    case 'iso8859-5':
641cb0ef41Sopenharmony_ci    case 'iso88595':
651cb0ef41Sopenharmony_ci    case 'iso_8859-5':
661cb0ef41Sopenharmony_ci    case 'iso_8859-5:1988':
671cb0ef41Sopenharmony_ci      return 'ISO-8859-5'
681cb0ef41Sopenharmony_ci    case 'arabic':
691cb0ef41Sopenharmony_ci    case 'asmo-708':
701cb0ef41Sopenharmony_ci    case 'csiso88596e':
711cb0ef41Sopenharmony_ci    case 'csiso88596i':
721cb0ef41Sopenharmony_ci    case 'csisolatinarabic':
731cb0ef41Sopenharmony_ci    case 'ecma-114':
741cb0ef41Sopenharmony_ci    case 'iso-8859-6':
751cb0ef41Sopenharmony_ci    case 'iso-8859-6-e':
761cb0ef41Sopenharmony_ci    case 'iso-8859-6-i':
771cb0ef41Sopenharmony_ci    case 'iso-ir-127':
781cb0ef41Sopenharmony_ci    case 'iso8859-6':
791cb0ef41Sopenharmony_ci    case 'iso88596':
801cb0ef41Sopenharmony_ci    case 'iso_8859-6':
811cb0ef41Sopenharmony_ci    case 'iso_8859-6:1987':
821cb0ef41Sopenharmony_ci      return 'ISO-8859-6'
831cb0ef41Sopenharmony_ci    case 'csisolatingreek':
841cb0ef41Sopenharmony_ci    case 'ecma-118':
851cb0ef41Sopenharmony_ci    case 'elot_928':
861cb0ef41Sopenharmony_ci    case 'greek':
871cb0ef41Sopenharmony_ci    case 'greek8':
881cb0ef41Sopenharmony_ci    case 'iso-8859-7':
891cb0ef41Sopenharmony_ci    case 'iso-ir-126':
901cb0ef41Sopenharmony_ci    case 'iso8859-7':
911cb0ef41Sopenharmony_ci    case 'iso88597':
921cb0ef41Sopenharmony_ci    case 'iso_8859-7':
931cb0ef41Sopenharmony_ci    case 'iso_8859-7:1987':
941cb0ef41Sopenharmony_ci    case 'sun_eu_greek':
951cb0ef41Sopenharmony_ci      return 'ISO-8859-7'
961cb0ef41Sopenharmony_ci    case 'csiso88598e':
971cb0ef41Sopenharmony_ci    case 'csisolatinhebrew':
981cb0ef41Sopenharmony_ci    case 'hebrew':
991cb0ef41Sopenharmony_ci    case 'iso-8859-8':
1001cb0ef41Sopenharmony_ci    case 'iso-8859-8-e':
1011cb0ef41Sopenharmony_ci    case 'iso-ir-138':
1021cb0ef41Sopenharmony_ci    case 'iso8859-8':
1031cb0ef41Sopenharmony_ci    case 'iso88598':
1041cb0ef41Sopenharmony_ci    case 'iso_8859-8':
1051cb0ef41Sopenharmony_ci    case 'iso_8859-8:1988':
1061cb0ef41Sopenharmony_ci    case 'visual':
1071cb0ef41Sopenharmony_ci      return 'ISO-8859-8'
1081cb0ef41Sopenharmony_ci    case 'csiso88598i':
1091cb0ef41Sopenharmony_ci    case 'iso-8859-8-i':
1101cb0ef41Sopenharmony_ci    case 'logical':
1111cb0ef41Sopenharmony_ci      return 'ISO-8859-8-I'
1121cb0ef41Sopenharmony_ci    case 'csisolatin6':
1131cb0ef41Sopenharmony_ci    case 'iso-8859-10':
1141cb0ef41Sopenharmony_ci    case 'iso-ir-157':
1151cb0ef41Sopenharmony_ci    case 'iso8859-10':
1161cb0ef41Sopenharmony_ci    case 'iso885910':
1171cb0ef41Sopenharmony_ci    case 'l6':
1181cb0ef41Sopenharmony_ci    case 'latin6':
1191cb0ef41Sopenharmony_ci      return 'ISO-8859-10'
1201cb0ef41Sopenharmony_ci    case 'iso-8859-13':
1211cb0ef41Sopenharmony_ci    case 'iso8859-13':
1221cb0ef41Sopenharmony_ci    case 'iso885913':
1231cb0ef41Sopenharmony_ci      return 'ISO-8859-13'
1241cb0ef41Sopenharmony_ci    case 'iso-8859-14':
1251cb0ef41Sopenharmony_ci    case 'iso8859-14':
1261cb0ef41Sopenharmony_ci    case 'iso885914':
1271cb0ef41Sopenharmony_ci      return 'ISO-8859-14'
1281cb0ef41Sopenharmony_ci    case 'csisolatin9':
1291cb0ef41Sopenharmony_ci    case 'iso-8859-15':
1301cb0ef41Sopenharmony_ci    case 'iso8859-15':
1311cb0ef41Sopenharmony_ci    case 'iso885915':
1321cb0ef41Sopenharmony_ci    case 'iso_8859-15':
1331cb0ef41Sopenharmony_ci    case 'l9':
1341cb0ef41Sopenharmony_ci      return 'ISO-8859-15'
1351cb0ef41Sopenharmony_ci    case 'iso-8859-16':
1361cb0ef41Sopenharmony_ci      return 'ISO-8859-16'
1371cb0ef41Sopenharmony_ci    case 'cskoi8r':
1381cb0ef41Sopenharmony_ci    case 'koi':
1391cb0ef41Sopenharmony_ci    case 'koi8':
1401cb0ef41Sopenharmony_ci    case 'koi8-r':
1411cb0ef41Sopenharmony_ci    case 'koi8_r':
1421cb0ef41Sopenharmony_ci      return 'KOI8-R'
1431cb0ef41Sopenharmony_ci    case 'koi8-ru':
1441cb0ef41Sopenharmony_ci    case 'koi8-u':
1451cb0ef41Sopenharmony_ci      return 'KOI8-U'
1461cb0ef41Sopenharmony_ci    case 'csmacintosh':
1471cb0ef41Sopenharmony_ci    case 'mac':
1481cb0ef41Sopenharmony_ci    case 'macintosh':
1491cb0ef41Sopenharmony_ci    case 'x-mac-roman':
1501cb0ef41Sopenharmony_ci      return 'macintosh'
1511cb0ef41Sopenharmony_ci    case 'iso-8859-11':
1521cb0ef41Sopenharmony_ci    case 'iso8859-11':
1531cb0ef41Sopenharmony_ci    case 'iso885911':
1541cb0ef41Sopenharmony_ci    case 'tis-620':
1551cb0ef41Sopenharmony_ci    case 'windows-874':
1561cb0ef41Sopenharmony_ci      return 'windows-874'
1571cb0ef41Sopenharmony_ci    case 'cp1250':
1581cb0ef41Sopenharmony_ci    case 'windows-1250':
1591cb0ef41Sopenharmony_ci    case 'x-cp1250':
1601cb0ef41Sopenharmony_ci      return 'windows-1250'
1611cb0ef41Sopenharmony_ci    case 'cp1251':
1621cb0ef41Sopenharmony_ci    case 'windows-1251':
1631cb0ef41Sopenharmony_ci    case 'x-cp1251':
1641cb0ef41Sopenharmony_ci      return 'windows-1251'
1651cb0ef41Sopenharmony_ci    case 'ansi_x3.4-1968':
1661cb0ef41Sopenharmony_ci    case 'ascii':
1671cb0ef41Sopenharmony_ci    case 'cp1252':
1681cb0ef41Sopenharmony_ci    case 'cp819':
1691cb0ef41Sopenharmony_ci    case 'csisolatin1':
1701cb0ef41Sopenharmony_ci    case 'ibm819':
1711cb0ef41Sopenharmony_ci    case 'iso-8859-1':
1721cb0ef41Sopenharmony_ci    case 'iso-ir-100':
1731cb0ef41Sopenharmony_ci    case 'iso8859-1':
1741cb0ef41Sopenharmony_ci    case 'iso88591':
1751cb0ef41Sopenharmony_ci    case 'iso_8859-1':
1761cb0ef41Sopenharmony_ci    case 'iso_8859-1:1987':
1771cb0ef41Sopenharmony_ci    case 'l1':
1781cb0ef41Sopenharmony_ci    case 'latin1':
1791cb0ef41Sopenharmony_ci    case 'us-ascii':
1801cb0ef41Sopenharmony_ci    case 'windows-1252':
1811cb0ef41Sopenharmony_ci    case 'x-cp1252':
1821cb0ef41Sopenharmony_ci      return 'windows-1252'
1831cb0ef41Sopenharmony_ci    case 'cp1253':
1841cb0ef41Sopenharmony_ci    case 'windows-1253':
1851cb0ef41Sopenharmony_ci    case 'x-cp1253':
1861cb0ef41Sopenharmony_ci      return 'windows-1253'
1871cb0ef41Sopenharmony_ci    case 'cp1254':
1881cb0ef41Sopenharmony_ci    case 'csisolatin5':
1891cb0ef41Sopenharmony_ci    case 'iso-8859-9':
1901cb0ef41Sopenharmony_ci    case 'iso-ir-148':
1911cb0ef41Sopenharmony_ci    case 'iso8859-9':
1921cb0ef41Sopenharmony_ci    case 'iso88599':
1931cb0ef41Sopenharmony_ci    case 'iso_8859-9':
1941cb0ef41Sopenharmony_ci    case 'iso_8859-9:1989':
1951cb0ef41Sopenharmony_ci    case 'l5':
1961cb0ef41Sopenharmony_ci    case 'latin5':
1971cb0ef41Sopenharmony_ci    case 'windows-1254':
1981cb0ef41Sopenharmony_ci    case 'x-cp1254':
1991cb0ef41Sopenharmony_ci      return 'windows-1254'
2001cb0ef41Sopenharmony_ci    case 'cp1255':
2011cb0ef41Sopenharmony_ci    case 'windows-1255':
2021cb0ef41Sopenharmony_ci    case 'x-cp1255':
2031cb0ef41Sopenharmony_ci      return 'windows-1255'
2041cb0ef41Sopenharmony_ci    case 'cp1256':
2051cb0ef41Sopenharmony_ci    case 'windows-1256':
2061cb0ef41Sopenharmony_ci    case 'x-cp1256':
2071cb0ef41Sopenharmony_ci      return 'windows-1256'
2081cb0ef41Sopenharmony_ci    case 'cp1257':
2091cb0ef41Sopenharmony_ci    case 'windows-1257':
2101cb0ef41Sopenharmony_ci    case 'x-cp1257':
2111cb0ef41Sopenharmony_ci      return 'windows-1257'
2121cb0ef41Sopenharmony_ci    case 'cp1258':
2131cb0ef41Sopenharmony_ci    case 'windows-1258':
2141cb0ef41Sopenharmony_ci    case 'x-cp1258':
2151cb0ef41Sopenharmony_ci      return 'windows-1258'
2161cb0ef41Sopenharmony_ci    case 'x-mac-cyrillic':
2171cb0ef41Sopenharmony_ci    case 'x-mac-ukrainian':
2181cb0ef41Sopenharmony_ci      return 'x-mac-cyrillic'
2191cb0ef41Sopenharmony_ci    case 'chinese':
2201cb0ef41Sopenharmony_ci    case 'csgb2312':
2211cb0ef41Sopenharmony_ci    case 'csiso58gb231280':
2221cb0ef41Sopenharmony_ci    case 'gb2312':
2231cb0ef41Sopenharmony_ci    case 'gb_2312':
2241cb0ef41Sopenharmony_ci    case 'gb_2312-80':
2251cb0ef41Sopenharmony_ci    case 'gbk':
2261cb0ef41Sopenharmony_ci    case 'iso-ir-58':
2271cb0ef41Sopenharmony_ci    case 'x-gbk':
2281cb0ef41Sopenharmony_ci      return 'GBK'
2291cb0ef41Sopenharmony_ci    case 'gb18030':
2301cb0ef41Sopenharmony_ci      return 'gb18030'
2311cb0ef41Sopenharmony_ci    case 'big5':
2321cb0ef41Sopenharmony_ci    case 'big5-hkscs':
2331cb0ef41Sopenharmony_ci    case 'cn-big5':
2341cb0ef41Sopenharmony_ci    case 'csbig5':
2351cb0ef41Sopenharmony_ci    case 'x-x-big5':
2361cb0ef41Sopenharmony_ci      return 'Big5'
2371cb0ef41Sopenharmony_ci    case 'cseucpkdfmtjapanese':
2381cb0ef41Sopenharmony_ci    case 'euc-jp':
2391cb0ef41Sopenharmony_ci    case 'x-euc-jp':
2401cb0ef41Sopenharmony_ci      return 'EUC-JP'
2411cb0ef41Sopenharmony_ci    case 'csiso2022jp':
2421cb0ef41Sopenharmony_ci    case 'iso-2022-jp':
2431cb0ef41Sopenharmony_ci      return 'ISO-2022-JP'
2441cb0ef41Sopenharmony_ci    case 'csshiftjis':
2451cb0ef41Sopenharmony_ci    case 'ms932':
2461cb0ef41Sopenharmony_ci    case 'ms_kanji':
2471cb0ef41Sopenharmony_ci    case 'shift-jis':
2481cb0ef41Sopenharmony_ci    case 'shift_jis':
2491cb0ef41Sopenharmony_ci    case 'sjis':
2501cb0ef41Sopenharmony_ci    case 'windows-31j':
2511cb0ef41Sopenharmony_ci    case 'x-sjis':
2521cb0ef41Sopenharmony_ci      return 'Shift_JIS'
2531cb0ef41Sopenharmony_ci    case 'cseuckr':
2541cb0ef41Sopenharmony_ci    case 'csksc56011987':
2551cb0ef41Sopenharmony_ci    case 'euc-kr':
2561cb0ef41Sopenharmony_ci    case 'iso-ir-149':
2571cb0ef41Sopenharmony_ci    case 'korean':
2581cb0ef41Sopenharmony_ci    case 'ks_c_5601-1987':
2591cb0ef41Sopenharmony_ci    case 'ks_c_5601-1989':
2601cb0ef41Sopenharmony_ci    case 'ksc5601':
2611cb0ef41Sopenharmony_ci    case 'ksc_5601':
2621cb0ef41Sopenharmony_ci    case 'windows-949':
2631cb0ef41Sopenharmony_ci      return 'EUC-KR'
2641cb0ef41Sopenharmony_ci    case 'csiso2022kr':
2651cb0ef41Sopenharmony_ci    case 'hz-gb-2312':
2661cb0ef41Sopenharmony_ci    case 'iso-2022-cn':
2671cb0ef41Sopenharmony_ci    case 'iso-2022-cn-ext':
2681cb0ef41Sopenharmony_ci    case 'iso-2022-kr':
2691cb0ef41Sopenharmony_ci    case 'replacement':
2701cb0ef41Sopenharmony_ci      return 'replacement'
2711cb0ef41Sopenharmony_ci    case 'unicodefffe':
2721cb0ef41Sopenharmony_ci    case 'utf-16be':
2731cb0ef41Sopenharmony_ci      return 'UTF-16BE'
2741cb0ef41Sopenharmony_ci    case 'csunicode':
2751cb0ef41Sopenharmony_ci    case 'iso-10646-ucs-2':
2761cb0ef41Sopenharmony_ci    case 'ucs-2':
2771cb0ef41Sopenharmony_ci    case 'unicode':
2781cb0ef41Sopenharmony_ci    case 'unicodefeff':
2791cb0ef41Sopenharmony_ci    case 'utf-16':
2801cb0ef41Sopenharmony_ci    case 'utf-16le':
2811cb0ef41Sopenharmony_ci      return 'UTF-16LE'
2821cb0ef41Sopenharmony_ci    case 'x-user-defined':
2831cb0ef41Sopenharmony_ci      return 'x-user-defined'
2841cb0ef41Sopenharmony_ci    default: return 'failure'
2851cb0ef41Sopenharmony_ci  }
2861cb0ef41Sopenharmony_ci}
2871cb0ef41Sopenharmony_ci
2881cb0ef41Sopenharmony_cimodule.exports = {
2891cb0ef41Sopenharmony_ci  getEncoding
2901cb0ef41Sopenharmony_ci}
291