{"version":3,"sources":["webpack:///./node_modules/react-syntax-highlighter/node_modules/highlight.js/lib/languages/ini.js"],"names":["source","re","concat","_len","arguments","length","args","Array","_key","joined","map","x","join","module","exports","hljs","NUMBERS","className","relevance","variants","begin","NUMBER_RE","COMMENTS","COMMENT","end","VARIABLES","LITERALS","STRINGS","contains","BACKSLASH_ESCAPE","ARRAY","ANY_KEY","_len2","_key2","either","name","aliases","case_insensitive","illegal","starts"],"mappings":"8EASA,SAASA,EAAOC,GACd,OAAKA,EACa,iBAAPA,EAAwBA,EAC5BA,EAAGD,OAFM,KAmBlB,SAASE,IACP,IAAK,IAAIC,EAAOC,UAAUC,OAAQC,EAAO,IAAIC,MAAMJ,GAAOK,EAAO,EAAGA,EAAOL,EAAMK,IAC/EF,EAAKE,GAAQJ,UAAUI,GAGzB,IAAIC,EAASH,EAAKI,KAAI,SAAUC,GAC9B,OAAOX,EAAOW,MACbC,KAAK,IACR,OAAOH,EA8GTI,EAAOC,QAhFP,SAAaC,GACX,IAAIC,EAAU,CACZC,UAAW,SACXC,UAAW,EACXC,SAAU,CAAC,CACTC,MAAO,0BACN,CACDA,MAAOL,EAAKM,aAGZC,EAAWP,EAAKQ,UACpBD,EAASH,SAAW,CAAC,CACnBC,MAAO,IACPI,IAAK,KACJ,CACDJ,MAAO,IACPI,IAAK,MAEP,IAAIC,EAAY,CACdR,UAAW,WACXE,SAAU,CAAC,CACTC,MAAO,qBACN,CACDA,MAAO,gBAGPM,EAAW,CACbT,UAAW,UACXG,MAAO,gCAELO,EAAU,CACZV,UAAW,SACXW,SAAU,CAACb,EAAKc,kBAChBV,SAAU,CAAC,CACTC,MAAO,MACPI,IAAK,MACLN,UAAW,IACV,CACDE,MAAO,MACPI,IAAK,MACLN,UAAW,IACV,CACDE,MAAO,IACPI,IAAK,KACJ,CACDJ,MAAO,IACPI,IAAK,OAGLM,EAAQ,CACVV,MAAO,KACPI,IAAK,KACLI,SAAU,CAACN,EAAUI,EAAUD,EAAWE,EAASX,EAAS,QAC5DE,UAAW,GAKTa,EA7EN,WACE,IAAK,IAAIC,EAAQ5B,UAAUC,OAAQC,EAAO,IAAIC,MAAMyB,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpF3B,EAAK2B,GAAS7B,UAAU6B,GAG1B,IAAIxB,EAAS,IAAMH,EAAKI,KAAI,SAAUC,GACpC,OAAOX,EAAOW,MACbC,KAAK,KAAO,IACf,OAAOH,EAqEOyB,CAHC,iBACe,gBACA,WAG9B,MAAO,CACLC,KAAM,iBACNC,QAAS,CAAC,QACVC,kBAAkB,EAClBC,QAAS,KACTV,SAAU,CAACN,EAAU,CACnBL,UAAW,UACXG,MAAO,MACPI,IAAK,OACJ,CACDJ,MAXalB,EAAO6B,EAAS,eAAgBA,EAAS,KAzGnD7B,EAAO,MAyG4D,gBAzGjD,MAqHrBe,UAAW,OACXsB,OAAQ,CACNf,IAAK,IACLI,SAAU,CAACN,EAAUQ,EAAOJ,EAAUD,EAAWE,EAASX","file":"react-syntax-highlighter_languages_highlight_ini-304fb451413f08e9c581.js","sourcesContent":["/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n  if (!re) return null;\n  if (typeof re === \"string\") return re;\n  return re.source;\n}\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\n\n\nfunction lookahead(re) {\n  return concat('(?=', re, ')');\n}\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\n\n\nfunction concat() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  var joined = args.map(function (x) {\n    return source(x);\n  }).join(\"\");\n  return joined;\n}\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] } args\n * @returns {string}\n */\n\n\nfunction either() {\n  for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n    args[_key2] = arguments[_key2];\n  }\n\n  var joined = '(' + args.map(function (x) {\n    return source(x);\n  }).join(\"|\") + \")\";\n  return joined;\n}\n/*\nLanguage: TOML, also INI\nDescription: TOML aims to be a minimal configuration file format that's easy to read due to obvious semantics.\nContributors: Guillaume Gomez <guillaume1.gomez@gmail.com>\nCategory: common, config\nWebsite: https://github.com/toml-lang/toml\n*/\n\n\nfunction ini(hljs) {\n  var NUMBERS = {\n    className: 'number',\n    relevance: 0,\n    variants: [{\n      begin: /([\\+\\-]+)?[\\d]+_[\\d_]+/\n    }, {\n      begin: hljs.NUMBER_RE\n    }]\n  };\n  var COMMENTS = hljs.COMMENT();\n  COMMENTS.variants = [{\n    begin: /;/,\n    end: /$/\n  }, {\n    begin: /#/,\n    end: /$/\n  }];\n  var VARIABLES = {\n    className: 'variable',\n    variants: [{\n      begin: /\\$[\\w\\d\"][\\w\\d_]*/\n    }, {\n      begin: /\\$\\{(.*?)}/\n    }]\n  };\n  var LITERALS = {\n    className: 'literal',\n    begin: /\\bon|off|true|false|yes|no\\b/\n  };\n  var STRINGS = {\n    className: \"string\",\n    contains: [hljs.BACKSLASH_ESCAPE],\n    variants: [{\n      begin: \"'''\",\n      end: \"'''\",\n      relevance: 10\n    }, {\n      begin: '\"\"\"',\n      end: '\"\"\"',\n      relevance: 10\n    }, {\n      begin: '\"',\n      end: '\"'\n    }, {\n      begin: \"'\",\n      end: \"'\"\n    }]\n  };\n  var ARRAY = {\n    begin: /\\[/,\n    end: /\\]/,\n    contains: [COMMENTS, LITERALS, VARIABLES, STRINGS, NUMBERS, 'self'],\n    relevance: 0\n  };\n  var BARE_KEY = /[A-Za-z0-9_-]+/;\n  var QUOTED_KEY_DOUBLE_QUOTE = /\"(\\\\\"|[^\"])*\"/;\n  var QUOTED_KEY_SINGLE_QUOTE = /'[^']*'/;\n  var ANY_KEY = either(BARE_KEY, QUOTED_KEY_DOUBLE_QUOTE, QUOTED_KEY_SINGLE_QUOTE);\n  var DOTTED_KEY = concat(ANY_KEY, '(\\\\s*\\\\.\\\\s*', ANY_KEY, ')*', lookahead(/\\s*=\\s*[^#\\s]/));\n  return {\n    name: 'TOML, also INI',\n    aliases: ['toml'],\n    case_insensitive: true,\n    illegal: /\\S/,\n    contains: [COMMENTS, {\n      className: 'section',\n      begin: /\\[+/,\n      end: /\\]+/\n    }, {\n      begin: DOTTED_KEY,\n      className: 'attr',\n      starts: {\n        end: /$/,\n        contains: [COMMENTS, ARRAY, LITERALS, VARIABLES, STRINGS, NUMBERS]\n      }\n    }]\n  };\n}\n\nmodule.exports = ini;"],"sourceRoot":""}