(function(a,d){if(a===d||a.registerLanguage===d){throw"Include sunlight.js before including language files";}var c=["int","char","void","long","signed","unsigned","double","bool","typename","class","short","wchar_t","struct"],b=["int","char","void","long","signed","unsigned","double","bool","typename","class","short","wchar_t"];a.registerLanguage("cpp",{keywords:["and","default","noexcept","template","and_eq","delete","not","this","alignof","double","not_eq","thread_local","asm","dynamic_cast","nullptr","throw","auto","else","operator","true","bitand","enum","or","try","bitor","explicittodo","or_eq","typedef","bool","export","private","typeid","break","externtodo","protected","typename","case","false","public","union","catch","float","register","using","char","for","reinterpret_cast","unsigned","char16_t","friend","return","void","char32_t","goto","short","wchar_t","class","if","signed","virtual","compl","inline","sizeof","volatile","const","int","static","while","constexpr","long","static_assert","xor","const_cast","mutable","static_cast","xor_eq","continue","namespace","struct","decltype","new","switch"],customTokens:{constant:{values:["EXIT_SUCCESS","EXIT_FAILURE","SIG_DFL","SIG_IGN","SIG_ERR","SIGABRT","SIGFPE","SIGILL","SIGINT","SIGSEGV","SIGTERM"],boundary:"\\b"},basicType:{values:["ptrdiff_t","size_t","nullptr_t","max_align_t"],boundary:"\\b"},ellipsis:{values:["..."],boundary:""}},scopes:{string:[['"','"',a.util.escapeSequences.concat(['\\"'])]],"char":[["'","'",["\\'","\\\\"]]],comment:[["//","\n",null,true],["/*","*/"]],preprocessorDirective:[["#","\n",null,true]]},customParseRules:[],identFirstLetter:/[A-Za-z_]/,identAfterFirstLetter:/\w/,namedIdentRules:{custom:[function(){var e=[[a.util.whitespace,{token:"operator",values:["*","**"]},{token:"default"},{token:"ident"},a.util.whitespace,{token:"punctuation",values:[";"]}],[{token:"default"},{token:"operator",values:["&"]},a.util.whitespace,{token:"ident"}]];return function(i){var h,g,f=function(k){for(var j=0;j<e.length;j++){if(a.util.createProceduralRule(i.index+1,1,e[j],false)(k)){return true;}}return false;}(i.tokens);if(!f){return false;}g=i.index;while(h=i.tokens[--g]){if(h.name==="punctuation"&&(h.value===";"||h.value==="{")){return true;}if(h.name==="operator"&&h.value==="="){return false;}}return false;};}(),function(){var e=[[a.util.whitespace,{token:"punctuation",values:[")"]},a.util.whitespace,{token:"ident"}],[{token:"operator",values:["*","**"]},a.util.whitespace,{token:"punctuation",values:[")"]},a.util.whitespace,{token:"operator",values:["&"],optional:true},{token:"ident"}]];return function(i){var h,g,j,f=function(l){for(var k=0;k<e.length;k++){if(a.util.createProceduralRule(i.index+1,1,e[k],false)(l)){return true;}}return false;}(i.tokens);if(!f){return false;}g=i.index;while(h=i.tokens[--g]){if(h.name==="punctuation"&&h.value==="("){j=a.util.getPreviousNonWsToken(i.tokens,g);if(j&&j.name==="keyword"){return false;}return true;}}return false;};}(),function(i){var g=i.index,h,j=a.util.getPreviousNonWsToken(i.tokens,i.index),f=false,e;if(!j||j.name==="keyword"){return false;}e=[0,0];while((h=i.tokens[--g])!==d){if(h.name==="keyword"&&h.value==="class"){return false;}if(h.name==="operator"){switch(h.value){case"<":case"<<":e[0]+=h.value.length;break;case">":case">>":if(e[0]===0){return false;}e[1]+=h.value.length;break;case".":break;default:return false;}continue;}if((h.name==="keyword"&&a.util.contains(b,h.value))||h.name==="default"||(h.name==="punctuation"&&h.value===",")){continue;}if(h.name==="ident"){f=true;continue;}break;}if(!f||e[0]===0){return false;}g=i.index;while((h=i.tokens[++g])!==d){if(h.name==="operator"&&(h.value===">"||h.value===">>")){return true;}if((h.name==="keyword"&&a.util.contains(b,h.value))||(h.name==="operator"&&a.util.contains(["<","<<",">",">>"],h.value))||(h.name==="punctuation"&&h.value===",")||h.name==="ident"||h.name==="default"){continue;}return false;}return false;},function(h){var g=a.util.getPreviousNonWsToken(h.tokens,h.index),f,e;if(g!==d){if(g.name==="ident"||(g.name==="keyword"&&a.util.contains(c.concat(["string","object","void"]),g.value))||(g.name==="operator"&&g.value===".")){return false;}}g=a.util.getNextNonWsToken(h.tokens,h.index);if(!g||g.name!=="operator"||g.value!=="<"){return false;}f=h.index;e=[0,0];while((g=h.tokens[++f])!==d){if(g.name==="operator"){switch(g.value){case"<":e[0]++;break;case"<<":e[0]+=2;break;case">":e[1]++;break;case">>":e[1]+=2;break;default:return false;}if(e[0]===e[1]){break;}continue;}if(g.name==="default"||g.name==="ident"||(g.name==="keyword"&&a.util.contains(b,g.value))||(g.name==="punctuation"&&g.value===",")){continue;}return false;}if(e[0]!==e[1]){return false;}g=h.tokens[++f];if(!g||(g.name!=="default"&&g.name!=="ident")){return false;}if(g.name==="default"){g=h.tokens[++f];if(!g||g.name!=="ident"){return false;}}return true;},function(g){var h=a.util.getPreviousNonWsToken(g.tokens,g.index),f,e;if(!h||h.name!=="keyword"||h.value!=="class"){return false;}e=g.index;while(f=g.tokens[++e]){if(f.name==="punctuation"&&f.value==="{"){return true;}if(f.name==="operator"&&a.util.contains([">",">>"],f.value)){return false;}}return false;}],follows:[[{token:"keyword",values:["enum","struct","union"]},a.util.whitespace]],precedes:[[{token:"default"},{token:"ident"}],[a.util.whitespace,{token:"operator",values:["*","**"]},{token:"default"},{token:"ident"},a.util.whitespace,{token:"operator",values:["=",","]}],[a.util.whitespace,{token:"operator",values:["*","**"]},{token:"default"},{token:"operator",values:["&"]},a.util.whitespace,{token:"ident"},a.util.whitespace,{token:"operator",values:["=",","]}],[a.util.whitespace,{token:"operator",values:["::"]}]]},operators:["==","=","+=","++","+","->*","->","-=","--","-","**","*=","*","/=","/","%=","%","!=","!",">>=",">>",">=",">","<<=","<<","<=","<","&=","&&","&","|=","||","|","~","^=","^",".*",".","?","::",":",","]});}(this["Sunlight"]));
