{"version":3,"sources":["webpack:///./node_modules/react-syntax-highlighter/node_modules/highlight.js/lib/languages/less.js"],"names":["module","exports","hljs","RULES","VALUE","STRING_MODE","c","className","begin","IDENT_MODE","name","relevance","PARENS_MODE","end","contains","push","C_LINE_COMMENT_MODE","C_BLOCK_COMMENT_MODE","CSS_NUMBER_MODE","starts","excludeEnd","IDENT_RE","returnBegin","VALUE_WITH_RULESETS","concat","MIXIN_GUARD_MODE","beginKeywords","endsWithParent","RULE_MODE","INTERP_IDENT_RE","illegal","AT_RULE_MODE","returnEnd","VAR_RULE_MODE","variants","SELECTOR_MODE","case_insensitive"],"mappings":"8EAsKAA,EAAOC,QA/JP,SAAcC,GACZ,IAKIC,EAAQ,GACRC,EAAQ,GAERC,EAAc,SAAqBC,GACrC,MAAO,CAELC,UAAW,SACXC,MAAO,KAAOF,EAAI,MAAQA,IAI1BG,EAAa,SAAoBC,EAAMF,EAAOG,GAChD,MAAO,CACLJ,UAAWG,EACXF,MAAOA,EACPG,UAAWA,IAIXC,EAAc,CAEhBJ,MAAO,MACPK,IAAK,MACLC,SAAUV,EACVO,UAAW,GAGbP,EAAMW,KAAKb,EAAKc,oBAAqBd,EAAKe,qBAAsBZ,EAAY,KAAMA,EAAY,KAAMH,EAAKgB,gBACzG,CACEV,MAAO,oBACPW,OAAQ,CACNZ,UAAW,SACXM,IAAK,WACLO,YAAY,IAEbX,EAAW,SAAU,oBAAqBG,EAAaH,EAAW,WAAY,aAAkB,IAAKA,EAAW,WAAY,cAAwBA,EAAW,WAAY,cAC9K,CAEEF,UAAW,YACXC,MAAOa,eACPR,IAAK,IACLS,aAAa,EACbF,YAAY,GACX,CACDb,UAAW,OACXC,MAAO,eAET,IAAIe,EAAsBnB,EAAMoB,OAAO,CACrChB,MAAO,IACPK,IAAK,IACLC,SAAUX,IAERsB,EAAmB,CACrBC,cAAe,OACfC,gBAAgB,EAChBb,SAAU,CAAC,CACTY,cAAe,YACdF,OAAOpB,IAKRwB,EAAY,CACdpB,MAAOqB,4BACPP,aAAa,EACbT,IAAK,OACLF,UAAW,EACXG,SAAU,CAAC,CACTP,UAAW,YACXC,MAxEkB,uBAyElBK,IAAK,IACLO,YAAY,EACZD,OAAQ,CACNQ,gBAAgB,EAChBG,QAAS,QACTnB,UAAW,EACXG,SAAUV,MAIZ2B,EAAe,CACjBxB,UAAW,UACXC,MAAO,2GACPW,OAAQ,CACNN,IAAK,QACLmB,WAAW,EACXlB,SAAUV,EACVO,UAAW,IAIXsB,EAAgB,CAClB1B,UAAW,WACX2B,SAAU,CAIV,CACE1B,MAAO,gBACPG,UAAW,IACV,CACDH,MAAO,aAETW,OAAQ,CACNN,IAAK,OACLmB,WAAW,EACXlB,SAAUS,IAGVY,EAAgB,CAIlBD,SAAU,CAAC,CACT1B,MAAO,eACPK,IAAK,SAEJ,CACDL,MAzHkB,uBA0HlBK,IAAK,MAEPS,aAAa,EACbU,WAAW,EACXF,QAAS,WACTnB,UAAW,EACXG,SAAU,CAACZ,EAAKc,oBAAqBd,EAAKe,qBAAsBQ,EAAkBhB,EAAW,UAAW,UAAWA,EAAW,WAAY,cAC1IA,EAAW,eAAgBoB,yBAAwB,GACnDpB,EAAW,cAAe,yBAAwBA,EAAW,iBAAkB,0BAAyB,GAAIA,EAAW,eAAgB,IAAK,GAAI,CAC9IF,UAAW,gBACXC,MAAO,MACPK,IAAK,OACJ,CACDN,UAAW,kBACXC,MAAO,kCACN,CACDA,MAAO,MACPK,IAAK,MACLC,SAAUS,GAEZ,CACEf,MAAO,gBAKX,OADAL,EAAMY,KAAKb,EAAKc,oBAAqBd,EAAKe,qBAAsBc,EAAcE,EAAeL,EAAWO,GACjG,CACLzB,KAAM,OACN0B,kBAAkB,EAClBN,QAAS,cACThB,SAAUX","file":"react-syntax-highlighter_languages_highlight_less-f6958137a51c43f938fd.js","sourcesContent":["/*\nLanguage: Less\nDescription: It's CSS, with just a little more.\nAuthor:   Max Mikhailov <seven.phases.max@gmail.com>\nWebsite: http://lesscss.org\nCategory: common, css\n*/\nfunction less(hljs) {\n  var IDENT_RE = '[\\\\w-]+'; // yes, Less identifiers may begin with a digit\n\n  var INTERP_IDENT_RE = '(' + IDENT_RE + '|@{' + IDENT_RE + '})';\n  /* Generic Modes */\n\n  var RULES = [],\n      VALUE = []; // forward def. for recursive modes\n\n  var STRING_MODE = function STRING_MODE(c) {\n    return {\n      // Less strings are not multiline (also include '~' for more consistent coloring of \"escaped\" strings)\n      className: 'string',\n      begin: '~?' + c + '.*?' + c\n    };\n  };\n\n  var IDENT_MODE = function IDENT_MODE(name, begin, relevance) {\n    return {\n      className: name,\n      begin: begin,\n      relevance: relevance\n    };\n  };\n\n  var PARENS_MODE = {\n    // used only to properly balance nested parens inside mixin call, def. arg list\n    begin: '\\\\(',\n    end: '\\\\)',\n    contains: VALUE,\n    relevance: 0\n  }; // generic Less highlighter (used almost everywhere except selectors):\n\n  VALUE.push(hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, STRING_MODE(\"'\"), STRING_MODE('\"'), hljs.CSS_NUMBER_MODE, // fixme: it does not include dot for numbers like .5em :(\n  {\n    begin: '(url|data-uri)\\\\(',\n    starts: {\n      className: 'string',\n      end: '[\\\\)\\\\n]',\n      excludeEnd: true\n    }\n  }, IDENT_MODE('number', '#[0-9A-Fa-f]+\\\\b'), PARENS_MODE, IDENT_MODE('variable', '@@?' + IDENT_RE, 10), IDENT_MODE('variable', '@{' + IDENT_RE + '}'), IDENT_MODE('built_in', '~?`[^`]*?`'), // inline javascript (or whatever host language) *multiline* string\n  {\n    // @media features (it’s here to not duplicate things in AT_RULE_MODE with extra PARENS_MODE overriding):\n    className: 'attribute',\n    begin: IDENT_RE + '\\\\s*:',\n    end: ':',\n    returnBegin: true,\n    excludeEnd: true\n  }, {\n    className: 'meta',\n    begin: '!important'\n  });\n  var VALUE_WITH_RULESETS = VALUE.concat({\n    begin: '{',\n    end: '}',\n    contains: RULES\n  });\n  var MIXIN_GUARD_MODE = {\n    beginKeywords: 'when',\n    endsWithParent: true,\n    contains: [{\n      beginKeywords: 'and not'\n    }].concat(VALUE) // using this form to override VALUE’s 'function' match\n\n  };\n  /* Rule-Level Modes */\n\n  var RULE_MODE = {\n    begin: INTERP_IDENT_RE + '\\\\s*:',\n    returnBegin: true,\n    end: '[;}]',\n    relevance: 0,\n    contains: [{\n      className: 'attribute',\n      begin: INTERP_IDENT_RE,\n      end: ':',\n      excludeEnd: true,\n      starts: {\n        endsWithParent: true,\n        illegal: '[<=$]',\n        relevance: 0,\n        contains: VALUE\n      }\n    }]\n  };\n  var AT_RULE_MODE = {\n    className: 'keyword',\n    begin: '@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\\\b',\n    starts: {\n      end: '[;{}]',\n      returnEnd: true,\n      contains: VALUE,\n      relevance: 0\n    }\n  }; // variable definitions and calls\n\n  var VAR_RULE_MODE = {\n    className: 'variable',\n    variants: [// using more strict pattern for higher relevance to increase chances of Less detection.\n    // this is *the only* Less specific statement used in most of the sources, so...\n    // (we’ll still often loose to the css-parser unless there's '//' comment,\n    // simply because 1 variable just can't beat 99 properties :)\n    {\n      begin: '@' + IDENT_RE + '\\\\s*:',\n      relevance: 15\n    }, {\n      begin: '@' + IDENT_RE\n    }],\n    starts: {\n      end: '[;}]',\n      returnEnd: true,\n      contains: VALUE_WITH_RULESETS\n    }\n  };\n  var SELECTOR_MODE = {\n    // first parse unambiguous selectors (i.e. those not starting with tag)\n    // then fall into the scary lookahead-discriminator variant.\n    // this mode also handles mixin definitions and calls\n    variants: [{\n      begin: '[\\\\.#:&\\\\[>]',\n      end: '[;{}]' // mixin calls end with ';'\n\n    }, {\n      begin: INTERP_IDENT_RE,\n      end: '{'\n    }],\n    returnBegin: true,\n    returnEnd: true,\n    illegal: '[<=\\'$\"]',\n    relevance: 0,\n    contains: [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, MIXIN_GUARD_MODE, IDENT_MODE('keyword', 'all\\\\b'), IDENT_MODE('variable', '@{' + IDENT_RE + '}'), // otherwise it’s identified as tag\n    IDENT_MODE('selector-tag', INTERP_IDENT_RE + '%?', 0), // '%' for more consistent coloring of @keyframes \"tags\"\n    IDENT_MODE('selector-id', '#' + INTERP_IDENT_RE), IDENT_MODE('selector-class', '\\\\.' + INTERP_IDENT_RE, 0), IDENT_MODE('selector-tag', '&', 0), {\n      className: 'selector-attr',\n      begin: '\\\\[',\n      end: '\\\\]'\n    }, {\n      className: 'selector-pseudo',\n      begin: /:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"'.]+/\n    }, {\n      begin: '\\\\(',\n      end: '\\\\)',\n      contains: VALUE_WITH_RULESETS\n    }, // argument list of parametric mixins\n    {\n      begin: '!important'\n    } // eat !important after mixin call or it will be colored as tag\n    ]\n  };\n  RULES.push(hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, AT_RULE_MODE, VAR_RULE_MODE, RULE_MODE, SELECTOR_MODE);\n  return {\n    name: 'Less',\n    case_insensitive: true,\n    illegal: '[=>\\'/<($\"]',\n    contains: RULES\n  };\n}\n\nmodule.exports = less;"],"sourceRoot":""}