{"version":3,"sources":["webpack:///./node_modules/react-syntax-highlighter/node_modules/highlight.js/lib/languages/groovy.js"],"names":["source","re","lookahead","_len","arguments","length","args","Array","_key","joined","map","x","join","concat","variants","obj","undefined","module","exports","hljs","COMMENT","C_LINE_COMMENT_MODE","C_BLOCK_COMMENT_MODE","relevance","contains","begin","className","REGEXP","BACKSLASH_ESCAPE","NUMBER","BINARY_NUMBER_MODE","C_NUMBER_MODE","STRING","end","APOS_STRING_MODE","QUOTE_STRING_MODE","name","keywords","built_in","literal","keyword","SHEBANG","beginKeywords","illegal","UNDERSCORE_TITLE_MODE","IDENT_RE","excludeBegin"],"mappings":"8EASA,SAASA,EAAOC,GACd,OAAKA,EACa,iBAAPA,EAAwBA,EAC5BA,EAAGD,OAFM,KAUlB,SAASE,EAAUD,GACjB,OAQF,WACE,IAAK,IAAIE,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,EAhBAI,CAAO,MAAOZ,EAAI,KA0B3B,SAASa,EAASA,GAChB,IAAIC,EAAMX,UAAUC,OAAS,QAAsBW,IAAjBZ,UAAU,GAAmBA,UAAU,GAAK,GAE9E,OADAW,EAAID,SAAWA,EACRC,EA6ETE,EAAOC,QA1EP,SAAgBC,GACd,IACIC,EAAUN,EAAS,CAACK,EAAKE,oBAAqBF,EAAKG,qBAAsBH,EAAKC,QAAQ,UAAW,OAAQ,CAC3GG,UAAW,EACXC,SAAU,CAAC,CAETC,MAAO,OACPF,UAAW,GACV,CACDG,UAAW,SACXD,MAAO,mBAGPE,EAAS,CACXD,UAAW,SACXD,MAAO,iBACPD,SAAU,CAACL,EAAKS,mBAEdC,EAASf,EAAS,CAACK,EAAKW,mBAAoBX,EAAKY,gBACjDC,EAASlB,EAAS,CAAC,CACrBW,MAAO,MACPQ,IAAK,OACJ,CACDR,MAAO,MACPQ,IAAK,OACJ,CACDR,MAAO,OACPQ,IAAK,OACLV,UAAW,IACVJ,EAAKe,iBAAkBf,EAAKgB,mBAAoB,CACjDT,UAAW,WAEb,MAAO,CACLU,KAAM,SACNC,SAAU,CACRC,SAAU,aACVC,QAAS,kBACTC,QAAS,6TAIXhB,SAAU,CAACL,EAAKsB,UAAWrB,EAASY,EAAQL,EAAQE,EAAQ,CAC1DH,UAAW,QACXgB,cAAe,6BACfT,IAAK,IACLU,QAAS,IACTnB,SAAU,CAAC,CACTkB,cAAe,sBACdvB,EAAKyB,wBACP,CACDlB,UAAW,OACXD,MAAO,cACN,CAEDC,UAAW,OACXD,MAAOoB,yBACN,CAGDpB,MAAO,KACPQ,IAAK,IACLT,SAAU,CAACJ,EAASY,EAAQL,EAAQE,EAAQ,SAC3C,CAEDH,UAAW,SACXD,MAAO,UAAYvB,EAAU2C,mBAC7BC,cAAc,EACdb,IAAKY,kBACLtB,UAAW,IAEboB,QAAS","file":"react-syntax-highlighter_languages_highlight_groovy-c99a548692a3b192c781.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 Language: Groovy\n Author: Guillaume Laforge <glaforge@gmail.com>\n Description: Groovy programming language implementation inspired from Vsevolod's Java mode\n Website: https://groovy-lang.org\n */\n\n\nfunction variants(variants) {\n  var obj = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  obj.variants = variants;\n  return obj;\n}\n\nfunction groovy(hljs) {\n  var IDENT_RE = '[A-Za-z0-9_$]+';\n  var COMMENT = variants([hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, hljs.COMMENT('/\\\\*\\\\*', '\\\\*/', {\n    relevance: 0,\n    contains: [{\n      // eat up @'s in emails to prevent them to be recognized as doctags\n      begin: /\\w+@/,\n      relevance: 0\n    }, {\n      className: 'doctag',\n      begin: '@[A-Za-z]+'\n    }]\n  })]);\n  var REGEXP = {\n    className: 'regexp',\n    begin: /~?\\/[^\\/\\n]+\\//,\n    contains: [hljs.BACKSLASH_ESCAPE]\n  };\n  var NUMBER = variants([hljs.BINARY_NUMBER_MODE, hljs.C_NUMBER_MODE]);\n  var STRING = variants([{\n    begin: /\"\"\"/,\n    end: /\"\"\"/\n  }, {\n    begin: /'''/,\n    end: /'''/\n  }, {\n    begin: \"\\\\$/\",\n    end: \"/\\\\$\",\n    relevance: 10\n  }, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE], {\n    className: \"string\"\n  });\n  return {\n    name: 'Groovy',\n    keywords: {\n      built_in: 'this super',\n      literal: 'true false null',\n      keyword: 'byte short char int long boolean float double void ' + // groovy specific keywords\n      'def as in assert trait ' + // common keywords with Java\n      'abstract static volatile transient public private protected synchronized final ' + 'class interface enum if else for while switch case break default continue ' + 'throw throws try catch finally implements extends new import package return instanceof'\n    },\n    contains: [hljs.SHEBANG(), COMMENT, STRING, REGEXP, NUMBER, {\n      className: 'class',\n      beginKeywords: 'class interface trait enum',\n      end: '{',\n      illegal: ':',\n      contains: [{\n        beginKeywords: 'extends implements'\n      }, hljs.UNDERSCORE_TITLE_MODE]\n    }, {\n      className: 'meta',\n      begin: '@[A-Za-z]+'\n    }, {\n      // highlight map keys and named parameters as attrs\n      className: 'attr',\n      begin: IDENT_RE + '[ \\t]*:'\n    }, {\n      // catch middle element of the ternary operator\n      // to avoid highlight it as a label, named parameter, or map key\n      begin: /\\?/,\n      end: /:/,\n      contains: [COMMENT, STRING, REGEXP, NUMBER, 'self']\n    }, {\n      // highlight labeled statements\n      className: 'symbol',\n      begin: '^[ \\t]*' + lookahead(IDENT_RE + ':'),\n      excludeBegin: true,\n      end: IDENT_RE + ':',\n      relevance: 0\n    }],\n    illegal: /#|<\\//\n  };\n}\n\nmodule.exports = groovy;"],"sourceRoot":""}