var CodeMirror=function(){function a(d,e){function Vb(a){return a>=0&&a=c.to||b.linee-400&&Y(yb.pos,d))return C(a),setTimeout(Dc,20),$c(d.line);if(xb&&xb.time>e-400&&Y(xb.pos,d))return yb={time:e,pos:d},C(a),Zc(d);xb={time:e,pos:d};var g=d,h;if(R&&!f.readOnly&&!Y(vb.from,vb.to)&&!Z(d,vb.from)&&!Z(vb.to,d)){O&&(ib.draggable=!0);var i=I(document,"mouseup",Td(function(b){O&&(ib.draggable=!1),Ab=!1,i(),Math.abs(a.clientX-b.clientX)+Math.abs(a.clientY-b.clientY)<10&&(C(b),Rc(d.line,d.ch,!0),Dc())}),!0);Ab=!0,ib.dragDrop&&ib.dragDrop();return}C(a),Rc(d.line,d.ch,!0);var l=I(document,"mousemove",Td(function(a){clearTimeout(h),C(a),!M&&!G(a)?k(a):j(a)}),!0),i=I(document,"mouseup",Td(k),!0)}function ac(a){for(var b=F(a);b!=s;b=b.parentNode)if(b.parentNode==hb)return C(a);var c=Gd(a);if(!c)return;yb={time:+(new Date),pos:c},C(a),Zc(c)}function bc(a){a.preventDefault();var b=Gd(a,!0),c=a.dataTransfer.files;if(!b||f.readOnly)return;if(c&&c.length&&window.FileReader&&window.File){function d(a,c){var d=new FileReader;d.onload=function(){g[c]=d.result,++h==e&&(b=Tc(b),Td(function(){var a=sc(g.join(""),b,b);Oc(b,a)})())},d.readAsText(a)}var e=c.length,g=Array(e),h=0;for(var i=0;i-1&&setTimeout(Td(function(){ad(vb.to.line,"smart")}),75);if(fc(a,d))return;zc()}function kc(a){if(f.onKeyEvent&&f.onKeyEvent(Wb,B(a)))return;H(a,"keyCode")==16&&(wb=null)}function lc(){if(f.readOnly=="nocursor")return;ub||(f.onFocus&&f.onFocus(Wb),ub=!0,s.className.search(/\bCodeMirror-focused\b/)==-1&&(s.className+=" CodeMirror-focused"),Ib||Cc(!0)),yc(),Id()}function mc(){ub&&(f.onBlur&&f.onBlur(Wb),ub=!1,Pb&&Td(function(){Pb&&(Pb(),Pb=null)})(),s.className=s.className.replace(" CodeMirror-focused","")),clearInterval(qb),setTimeout(function(){ub||(wb=null)},150)}function nc(a,b,c,d,e){if(Cb)return;if(Tb){var g=[];sb.iter(a.line,b.line+1,function(a){g.push(a.text)}),Tb.addChange(a.line,c.length,g);while(Tb.done.length>f.undoDepth)Tb.done.shift()}rc(a,b,c,d,e)}function oc(a,b){if(!a.length)return;var c=a.pop(),d=[];for(var e=c.length-1;e>=0;e-=1){var f=c[e],g=[],h=f.start+f.added;sb.iter(f.start,h,function(a){g.push(a.text)}),d.push({start:f.start,added:f.old.length,old:g});var i=Tc({line:f.start+f.old.length-1,ch:bb(g[g.length-1],f.old[f.old.length-1])});rc({line:f.start,ch:0},{line:h-1,ch:Xb(h-1).text.length},f.old,i,i)}Db=!0,b.push(d)}function pc(){oc(Tb.done,Tb.undone)}function qc(){oc(Tb.undone,Tb.done)}function rc(a,b,c,d,e){function y(a){return a<=Math.min(b.line,b.line+s)?a:a+s}if(Cb)return;var g=!1,h=Qb.length;f.lineWrapping||sb.iter(a.line,b.line,function(a){if(a.text.length==h)return g=!0,!0});if(a.line!=b.line||c.length>1)Jb=!0;var i=b.line-a.line,j=Xb(a.line),k=Xb(b.line);if(a.ch==0&&b.ch==0&&c[c.length-1]==""){var l=[],m=null;a.line?(m=Xb(a.line-1),m.fixMarkEnds(k)):k.fixMarkStarts();for(var n=0,o=c.length-1;n1&&sb.remove(a.line+1,i-1,Kb),sb.insert(a.line+1,l)}if(f.lineWrapping){var p=S.clientWidth/Dd()-3;sb.iter(a.line,a.line+c.length,function(a){if(a.hidden)return;var b=Math.ceil(a.text.length/p)||1;b!=a.height&&Yb(a,b)})}else sb.iter(a.line,n+c.length,function(a){var b=a.text;b.length>h&&(Qb=b,h=b.length,Rb=null,g=!1)}),g&&(h=0,Qb="",Rb=null,sb.iter(0,sb.size,function(a){var b=a.text;b.length>h&&(h=b.length,Qb=b)}));var q=[],s=c.length-i-1;for(var n=0,t=tb.length;nb.line&&q.push(u+s)}var v=a.line+Math.min(c.length,500);Nd(a.line,v),q.push(v),tb=q,Pd(100),Fb.push({from:a.line,to:b.line+1,diff:s});var w={from:a,to:b,text:c};if(Gb){for(var x=Gb;x.next;x=x.next);x.next=w}else Gb=w;Pc(d,e,y(vb.from.line),y(vb.to.line)),S.clientHeight&&(T.style.height=sb.height*Ad()+2*Ed()+"px")}function sc(a,b,c){function d(d){if(Z(d,b))return d;if(!Z(c,d))return e;var f=d.line+a.length-(c.line-b.line)-1,g=d.ch;return d.line==c.line&&(g+=a[a.length-1].length-(c.ch-(c.line==b.line?b.ch:0))),{line:f,ch:g}}b=Tc(b),c?c=Tc(c):c=b,a=eb(a);var e;return uc(a,b,c,function(a){return e=a,{from:d(vb.from),to:d(vb.to)}}),e}function tc(a,b){uc(eb(a),vb.from,vb.to,function(a){return b=="end"?{from:a,to:a}:b=="start"?{from:vb.from,to:vb.from}:{from:vb.from,to:a}})}function uc(a,b,c,d){var e=a.length==1?a[0].length+b.ch:a[a.length-1].length,f=d({line:b.line+a.length-1,ch:e});nc(b,c,a,f.from,f.to)}function vc(a,b){var c=a.line,d=b.line;if(c==d)return Xb(c).text.slice(a.ch,b.ch);var e=[Xb(c).text.slice(a.ch)];return sb.iter(c+1,d,function(a){e.push(a.text)}),e.push(Xb(d).text.slice(0,b.ch)),e.join("\n")}function wc(){return vc(vb.from,vb.to)}function yc(){if(xc)return;ob.set(f.pollInterval,function(){Qd(),Bc(),ub&&yc(),Rd()})}function zc(){function b(){Qd();var c=Bc();!c&&!a?(a=!0,ob.set(60,b)):(xc=!1,yc()),Rd()}var a=!1;xc=!0,ob.set(20,b)}function Bc(){if(Ib||!ub||fb(D)||f.readOnly)return!1;var a=D.value;if(a==Ac)return!1;wb=null;var b=0,c=Math.min(Ac.length,a.length);while(bb)&&kb.scrollIntoView()}function Fc(){var a=ud(vb.inverted?vb.from:vb.to),b=f.lineWrapping?Math.min(a.x,ib.offsetWidth):a.x;return Gc(b,a.y,b,a.yBot)}function Gc(a,b,c,d){var e=Fd(),g=Ed();b+=g,d+=g,a+=e,c+=e;var h=S.clientHeight,i=S.scrollTop,j=!1,k=!0;bi+h&&(S.scrollTop=d-h,j=!0);var l=S.clientWidth,m=S.scrollLeft,n=f.fixedGutter?_.clientWidth:0;return al+m-3&&(S.scrollLeft=c+10-l,j=!0,c>T.clientWidth&&(k=!1)),j&&f.onScroll&&f.onScroll(Wb),k}function Hc(){var a=Ad(),b=S.scrollTop-Ed(),c=Math.max(0,Math.floor(b/a)),d=Math.ceil((b+S.clientHeight)/a);return{from:x(sb,c),to:x(sb,d)}}function Ic(a,b){function n(){Rb=S.clientWidth;var a=mb.firstChild,b=!1;return sb.iter(Mb,Nb,function(c){if(!c.hidden){var d=Math.round(a.offsetHeight/k)||1;c.height!=d&&(Yb(c,d),Jb=b=!0)}a=a.nextSibling}),b&&(T.style.height=sb.height*k+2*Ed()+"px"),b}if(!S.clientWidth){Mb=Nb=Lb=0;return}var c=Hc();if(a!==!0&&a.length==0&&c.from>Mb&&c.toe&&Nb-e<20&&(e=Math.min(sb.size,Nb));var g=a===!0?[]:Jc([{from:Mb,to:Nb,domStart:0}],a),h=0;for(var i=0;ie&&(j.to=e),j.from>=j.to?g.splice(i--,1):h+=j.to-j.from}if(h==e-d)return;g.sort(function(a,b){return a.domStart-b.domStart});var k=Ad(),l=_.style.display;mb.style.display="none",Kc(d,e,g),mb.style.display=_.style.display="";var m=d!=Mb||e!=Nb||Ob!=S.clientHeight+k;m&&(Ob=S.clientHeight+k),Mb=d,Nb=e,Lb=y(sb,d),U.style.top=Lb*k+"px",S.clientHeight&&(T.style.height=sb.height*k+2*Ed()+"px");if(mb.childNodes.length!=Nb-Mb)throw new Error("BAD PATCH! "+JSON.stringify(g)+" size="+(Nb-Mb)+" nodes="+mb.childNodes.length);return f.lineWrapping?n():(Rb==null&&(Rb=qd(Qb)),Rb>S.clientWidth?(ib.style.width=Rb+"px",T.style.width="",T.style.width=S.scrollWidth+"px"):ib.style.width=T.style.width=""),_.style.display=l,(m||Jb)&&Lc()&&f.lineWrapping&&n()&&Lc(),Mc(),!b&&f.onUpdate&&f.onUpdate(Wb),!0}function Jc(a,b){for(var c=0,d=b.length||0;c=j.to?f.push(j):(e.from>j.from&&f.push({from:j.from,to:e.from,domStart:j.domStart}),e.toe)f=d(f),e++;for(var j=0,k=i.to-i.from;jj){if(a.hidden)var b=m.innerHTML="
";else{var b=""+a.getHTML(ed)+"";a.bgClassName&&(b='
 
'+b+"
")}m.innerHTML=b,mb.insertBefore(m.firstChild,f)}else f=f.nextSibling;++j})}function Lc(){if(!f.gutter&&!f.lineNumbers)return;var a=U.offsetHeight,b=S.clientHeight;_.style.height=(a-b<2?b:a)+"px";var c=[],d=Mb,e;sb.iter(Mb,Math.max(Nb,Mb+1),function(a){if(a.hidden)c.push("
");else{var b=a.gutterMarker,g=f.lineNumbers?d+f.firstLineNumber:null;b&&b.text?g=b.text.replace("%N%",g!=null?g:""):g==null&&(g="\u00a0"),c.push(b&&b.style?'
':"
",g);for(var h=1;h ");c.push("
"),b||(e=d)}++d}),_.style.display="none",hb.innerHTML=c.join("");if(e!=null){var g=hb.childNodes[e-Mb],h=String(sb.size).length,i=W(g),j="";while(i.length+j.length2;return ib.style.marginLeft=_.offsetWidth+"px",Jb=!1,k}function Mc(){var a=Y(vb.from,vb.to),b=ud(vb.from,!0),c=a?b:ud(vb.to,!0),d=vb.inverted?b:c,e=Ad(),g=V(s),h=V(mb);A.style.top=Math.max(0,Math.min(S.offsetHeight,d.y+h.top-g.top))+"px",A.style.left=Math.max(0,Math.min(S.offsetWidth,d.x+h.left-g.left))+"px";if(a)kb.style.top=d.y+"px",kb.style.left=(f.lineWrapping?Math.min(d.x,ib.offsetWidth):d.x)+"px",kb.style.display="",lb.style.display="none";else{var i=b.y==c.y,j="";function k(a,b,c,d){j+='
'}var l=ib.clientWidth||ib.offsetWidth,m=ib.clientHeight||ib.offsetHeight;if(vb.from.ch&&b.y>=0){var n=i?l-c.x:0;k(b.x,b.y,n,e)}var o=Math.max(0,b.y+(vb.from.ch?e:0)),p=Math.min(c.y,m)-o;p>.2*e&&k(0,o,0,p),(!i||!vb.from.ch)&&c.yc||g>f.text.length)g=f.text.length;return{line:d,ch:g}}d+=b}}var e=Xb(a.line);return e.hidden?a.line>=b?d(1)||d(-1):d(-1)||d(1):a}function Rc(a,b,c){var d=Tc({line:a,ch:b||0});(c?Oc:Pc)(d,d)}function Sc(a){return Math.max(0,Math.min(a,sb.size-1))}function Tc(a){if(a.line<0)return{line:0,ch:0};if(a.line>=sb.size)return{line:sb.size-1,ch:Xb(sb.size-1).text.length};var b=a.ch,c=Xb(a.line).text.length;return b==null||b>c?{line:a.line,ch:c}:b<0?{line:a.line,ch:0}:a}function Uc(a,b){function g(){for(var b=d+a,c=a<0?-1:sb.size;b!=c;b+=a){var e=Xb(b);if(!e.hidden)return d=b,f=e,!0}}function h(b){if(e==(a<0?0:f.text.length)){if(!!b||!g())return!1;e=a<0?f.text.length:0}else e+=a;return!0}var c=vb.inverted?vb.from:vb.to,d=c.line,e=c.ch,f=Xb(d);if(b=="char")h();else if(b=="column")h(!0);else if(b=="word"){var i=!1;for(;;){if(a<0&&!h())break;if(db(f.text.charAt(e)))i=!0;else if(i){a<0&&(a=1,h());break}if(a>0&&!h())break}}return{line:d,ch:e}}function Vc(a,b){var c=a<0?vb.from:vb.to;if(wb||Y(vb.from,vb.to))c=Uc(a,b);Rc(c.line,c.ch,!0)}function Wc(a,b){Y(vb.from,vb.to)?a<0?sc("",Uc(a,b),vb.to):sc("",vb.from,Uc(a,b)):sc("",vb.from,vb.to),Eb=!0}function Yc(a,b){var c=0,d=ud(vb.inverted?vb.from:vb.to,!0);Xc!=null&&(d.x=Xc),b=="page"?c=Math.min(S.clientHeight,window.innerHeight||document.documentElement.clientHeight):b=="line"&&(c=Ad());var e=vd(d.x,d.y+c*a+2);b=="page"&&(S.scrollTop+=ud(e,!0).y-d.y),Rc(e.line,e.ch,!0),Xc=d.x}function Zc(a){var b=Xb(a.line).text,c=a.ch,d=a.ch;while(c>0&&db(b.charAt(c-1)))--c;while(dQb.length&&(Qb=a.text)});Fb.push({from:0,to:sb.size})}function ed(a){var b=f.tabSize-a%f.tabSize,c=Sb[b];if(c)return c;for(var d='',e=0;e",width:b}}function fd(){S.className=S.className.replace(/\s*cm-s-\w+/g,"")+f.theme.replace(/(^|\s)\s*/g," cm-s-")}function gd(){this.set=[]}function hd(a,b,c){function e(a,b,c,e){Xb(a).addMark(new p(b,c,e,d))}a=Tc(a),b=Tc(b);var d=new gd;if(!Z(a,b))return d;if(a.line==b.line)e(a.line,a.ch,b.ch,c);else{e(a.line,a.ch,null,c);for(var f=a.line+1,g=b.line;f=a.ch)&&b.push(f.marker||f)}return b}function kd(a,b,c){return typeof a=="number"&&(a=Xb(Sc(a))),a.gutterMarker={text:b,style:c},Jb=!0,a}function ld(a){typeof a=="number"&&(a=Xb(Sc(a))),a.gutterMarker=null,Jb=!0}function md(a,b){var c=a,d=a;return typeof a=="number"?d=Xb(Sc(a)):c=w(a),c==null?null:b(d,c)?(Fb.push({from:c,to:c+1}),d):null}function nd(a,b,c){return md(a,function(a){if(a.className!=b||a.bgClassName!=c)return a.className=b,a.bgClassName=c,!0})}function od(a,b){return md(a,function(a,c){if(a.hidden!=b){a.hidden=b,Yb(a,b?0:1);var d=vb.from.line,e=vb.to.line;if(b&&(d==c||e==c)){var f=d==c?Qc({line:d,ch:0},d,0):vb.from,g=e==c?Qc({line:e,ch:0},e,0):vb.to;if(!g)return;Pc(f,g)}return Jb=!0}})}function pd(a){if(typeof a=="number"){if(!Vb(a))return null;var b=a;a=Xb(a);if(!a)return null}else{var b=w(a);if(b==null)return null}var c=a.gutterMarker;return{line:b,handle:a,text:a.text,markerText:c&&c.text,markerClass:c&&c.style,lineClass:a.className,bgClass:a.bgClassName}}function qd(a){return jb.innerHTML="
x
",jb.firstChild.firstChild.firstChild.nodeValue=a,jb.firstChild.firstChild.offsetWidth||10}function rd(a,b){function e(a){return jb.innerHTML="
"+c.getHTML(ed,a)+"
",jb.firstChild.firstChild.offsetWidth}if(b<=0)return 0;var c=Xb(a),d=c.text,f=0,g=0,h=d.length,i,j=Math.min(h,Math.ceil(b/Dd()));for(;;){var k=e(j);if(!(k<=b&&ji)return h;j=Math.floor(h*.8),k=e(j),kb-g?f:h;var l=Math.ceil((f+h)/2),m=e(l);m>b?(h=l,i=m):(f=l,g=m)}}function td(a,b){if(b==0)return{top:0,left:0};var c="";if(f.lineWrapping){var d=a.text.indexOf(" ",b+6);c=ab(a.text.slice(b+1,d<0?a.text.length:d+(M?5:0)))}jb.innerHTML="
"+a.getHTML(ed,b)+''+ab(a.text.charAt(b)||" ")+""+c+"
";var e=document.getElementById("CodeMirror-temp-"+sd),g=e.offsetTop,h=e.offsetLeft;if(M&&g==0&&h==0){var i=document.createElement("span");i.innerHTML="x",e.parentNode.insertBefore(i,e.nextSibling),g=i.offsetTop}return{top:g,left:h}}function ud(a,b){var c,d=Ad(),e=d*(y(sb,a.line)-(b?Lb:0));if(a.ch==0)c=0;else{var g=td(Xb(a.line),a.ch);c=g.left,f.lineWrapping&&(e+=Math.max(0,g.top))}return{x:c,y:e,yBot:e+d}}function vd(a,b){function l(a){var b=td(h,a);if(j){var d=Math.round(b.top/c);return Math.max(0,b.left+(d-k)*S.clientWidth)}return b.left}b<0&&(b=0);var c=Ad(),d=Dd(),e=Lb+Math.floor(b/c),g=x(sb,e);if(g>=sb.size)return{line:sb.size-1,ch:Xb(sb.size-1).text.length};var h=Xb(g),i=h.text,j=f.lineWrapping,k=j?e-y(sb,g):0;if(a<=0&&k==0)return{line:g,ch:0};var m=0,n=0,o=i.length,p,q=Math.min(o,Math.ceil((a+k*S.clientWidth*.9)/d));for(;;){var r=l(q);if(!(r<=a&&qp)return{line:g,ch:o};q=Math.floor(o*.8),r=l(q),ra-n?m:o};var s=Math.ceil((m+o)/2),t=l(s);t>a?(o=s,p=t):(m=s,n=t)}}function wd(a){var b=ud(a,!0),c=V(ib);return{x:c.left+b.x,y:c.top+b.y,yBot:c.top+b.yBot}}function Ad(){if(zd==null){zd="
";for(var a=0;a<49;++a)zd+="x
";zd+="x
"}var b=mb.clientHeight;return b==yd?xd:(yd=b,jb.innerHTML=zd,xd=jb.firstChild.offsetHeight/50||1,jb.innerHTML="",xd)}function Dd(){return S.clientWidth==Cd?Bd:(Cd=S.clientWidth,Bd=qd("x"))}function Ed(){return ib.offsetTop}function Fd(){return ib.offsetLeft}function Gd(a,b){var c=V(S,!0),d,e;try{d=a.clientX,e=a.clientY}catch(a){return null}if(!b&&(d-c.left>S.clientWidth||e-c.top>S.clientHeight))return null;var f=V(ib,!0);return vd(d-f.left,e-f.top)}function Hd(a){function f(){var a=eb(D.value).join("\n");a!=e&&Td(tc)(a,"end"),A.style.position="relative",D.style.cssText=d,N&&(S.scrollTop=c),Ib=!1,Cc(!0),yc()}var b=Gd(a),c=S.scrollTop;if(!b||window.opera)return;(Y(vb.from,vb.to)||Z(b,vb.from)||!Z(b,vb.to))&&Td(Rc)(b.line,b.ch);var d=D.style.cssText;A.style.position="absolute",D.style.cssText="position: fixed; width: 30px; height: 30px; top: "+(a.clientY-5)+"px; left: "+(a.clientX-5)+"px; z-index: 1000; background: white; "+"border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",Ib=!0;var e=D.value=wc();Dc(),X(D);if(L){E(a);var g=I(window,"mouseup",function(){g(),setTimeout(f,20)},!0)}else setTimeout(f,50)}function Id(){clearInterval(qb);var a=!0;kb.style.visibility="",qb=setInterval(function(){kb.style.visibility=(a=!a)?"":"hidden"},650)}function Kd(a){function p(a,b,c){if(!a.text)return;var d=a.styles,e=g?0:a.text.length-1,f;for(var i=g?0:d.length-2,j=g?d.length:-2;i!=j;i+=2*h){var k=d[i];if(d[i+1]!=null&&d[i+1]!=m){e+=h*k.length;continue}for(var l=g?0:k.length-1,p=g?k.length:-1;l!=p;l+=h,e+=h)if(e>=b&&e"==g)n.push(f);else{if(n.pop()!=q.charAt(0))return{pos:e,match:!1};if(!n.length)return{pos:e,match:!0}}}}}var b=vb.inverted?vb.from:vb.to,c=Xb(b.line),d=b.ch-1,e=d>=0&&Jd[c.text.charAt(d)]||Jd[c.text.charAt(++d)];if(!e)return;var f=e.charAt(0),g=e.charAt(1)==">",h=g?1:-1,i=c.styles;for(var j=d+1,k=0,l=i.length;ke;--d){if(d==0)return 0;var g=Xb(d-1);if(g.stateAfter)return d;var h=g.indentation(f.tabSize);if(c==null||b>h)c=d-1,b=h}return c}function Md(a){var b=Ld(a),c=b&&Xb(b-1).stateAfter;return c?c=m(rb,c):c=n(rb),sb.iter(b,a,function(a){a.highlight(rb,c,f.tabSize),a.stateAfter=m(rb,c)}),b=sb.size)continue;var d=Ld(c),e=d&&Xb(d-1).stateAfter;e?e=m(rb,e):e=n(rb);var g=0,h=rb.compareStates,i=!1,j=d,k=!1;sb.iter(j,sb.size,function(b){var d=b.stateAfter;if(+(new Date)>a)return tb.push(j),Pd(f.workDelay),i&&Fb.push({from:c,to:j+1}),k=!0;var l=b.highlight(rb,e,f.tabSize);l&&(i=!0),b.stateAfter=m(rb,e);if(h){if(d&&h(d,e))return!0}else if(l!==!1||!d)g=0;else if(++g>3&&(!rb.indent||rb.indent(d,"")==rb.indent(e,"")))return!0;++j});if(k)return;i&&Fb.push({from:c,to:j+1})}b&&f.onHighlightComplete&&f.onHighlightComplete(Wb)}function Pd(a){if(!tb.length)return;pb.set(a,Td(Od))}function Qd(){Db=Eb=Gb=null,Fb=[],Hb=!1,Kb=[]}function Rd(){var a=!1,b;Hb&&(a=!Fc()),Fb.length?b=Ic(Fb,!0):(Hb&&Mc(),Jb&&Lc()),a&&Fc(),Hb&&(Ec(),Id()),ub&&!Ib&&(Db===!0||Db!==!1&&Hb)&&Cc(Eb),Hb&&f.matchBrackets&&setTimeout(Td(function(){Pb&&(Pb(),Pb=null),Y(vb.from,vb.to)&&Kd(!1)}),20);var c=Gb,d=Kb;Hb&&f.onCursorActivity&&f.onCursorActivity(Wb),c&&f.onChange&&Wb&&f.onChange(Wb,c);for(var e=0;eh&&a.y>b.offsetHeight&&(f=a.y-b.offsetHeight),g+b.offsetWidth>i&&(g=i-b.offsetWidth)}b.style.top=f+Ed()+"px",b.style.left=b.style.right="",e=="right"?(g=T.clientWidth-b.offsetWidth,b.style.right="0px"):(e=="left"?g=0:e=="middle"&&(g=(T.clientWidth-b.offsetWidth)/2),b.style.left=g+Fd()+"px"),c&&Gc(g,f,g+b.offsetWidth,f+b.offsetHeight)},lineCount:function(){return sb.size},clipPos:Tc,getCursor:function(a){return a==null&&(a=vb.inverted),$(a?vb.from:vb.to)},somethingSelected:function(){return!Y(vb.from,vb.to)},setCursor:Td(function(a,b,c){b==null&&typeof a.line=="number"?Rc(a.line,a.ch,c):Rc(a,b,c)}),setSelection:Td(function(a,b,c){(c?Oc:Pc)(Tc(a),Tc(b||a))}),getLine:function(a){if(Vb(a))return Xb(a).text},getLineHandle:function(a){if(Vb(a))return Xb(a)},setLine:Td(function(a,b){Vb(a)&&sc(b,{line:a,ch:0},{line:a,ch:Xb(a).text.length})}),removeLine:Td(function(a){Vb(a)&&sc("",{line:a,ch:0},Tc({line:a+1,ch:0}))}),replaceRange:Td(sc),getRange:function(a,b){return vc(Tc(a),Tc(b))},triggerOnKeyDown:Td(ic),execCommand:function(a){return h[a](Wb)},moveH:Td(Vc),deleteH:Td(Wc),moveV:Td(Yc),toggleOverwrite:function(){Bb?(Bb=!1,kb.className=kb.className.replace(" CodeMirror-overwrite","")):(Bb=!0,kb.className+=" CodeMirror-overwrite")},posFromIndex:function(a){var b=0,c;return sb.iter(0,sb.size,function(d){var e=d.text.length+1;if(e>a)return c=a,!0;a-=e,++b}),Tc({line:b,ch:c})},indexFromPos:function(a){if(a.line<0||a.ch<0)return 0;var b=a.ch;return sb.iter(0,a.line,function(a){b+=a.text.length+1}),b},scrollTo:function(a,b){a!=null&&(S.scrollLeft=a),b!=null&&(S.scrollTop=b),Ic([])},operation:function(a){return Td(a)()},refresh:function(){Ic(!0),S.scrollHeight>zb&&(S.scrollTop=zb)},getInputField:function(){return D},getWrapperElement:function(){return s},getScrollerElement:function(){return S},getGutterElement:function(){return _}},gc=null,hc,xc=!1,Ac="",Xc=null;gd.prototype.clear=Td(function(){var a=Infinity,b=-Infinity;for(var c=0,d=this.set.length;c",")":"(<","[":"]>","]":"[<","{":"}>","}":"{<"},Sd=0;for(var Ud in g)g.propertyIsEnumerable(Ud)&&!Wb.propertyIsEnumerable(Ud)&&(Wb[Ud]=g[Ud]);return Wb}function j(a){return typeof a=="string"?i[a]:a}function k(a,b,c,d){function e(b){b=j(b);var c=b[a];if(c!=null&&d(c))return!0;if(b.catchall)return d(b.catchall);var f=b.fallthrough;if(f==null)return!1;if(Object.prototype.toString.call(f)!="[object Array]")return e(f);for(var g=0,h=f.length;ga&&d.push(h.slice(a-f,Math.min(h.length,b-f)),c[e+1]),i>=a&&(g=1)):g==1&&(i>b?d.push(h.slice(0,b-f),c[e+1]):d.push(h,c[e+1])),f=i}}function t(a){this.lines=a,this.parent=null;for(var b=0,c=a.length,d=0;b=0&&d>=0;--c,--d)if(a.charAt(c)!=b.charAt(d))break;return d+1}function cb(a,b){if(a.indexOf)return a.indexOf(b);for(var c=0,d=a.length;c0&&b.ch=this.string.length},sol:function(){return this.pos==0},peek:function(){return this.string.charAt(this.pos)},next:function(){if(this.posb},eatSpace:function(){var a=this.pos;while(/[\s\u00a0]/.test(this.string.charAt(this.pos)))++this.pos;return this.pos>a},skipToEnd:function(){this.pos=this.string.length},skipTo:function(a){var b=this.string.indexOf(a,this.pos);if(b>-1)return this.pos=b,!0},backUp:function(a){this.pos-=a},column:function(){return T(this.string,this.start,this.tabSize)},indentation:function(){return T(this.string,null,this.tabSize)},match:function(a,b,c){if(typeof a!="string"){var e=this.string.slice(this.pos).match(a);return e&&b!==!1&&(this.pos+=e[0].length),e}function d(a){return c?a.toLowerCase():a}if(d(this.string).indexOf(d(a),this.pos)==this.pos)return b!==!1&&(this.pos+=a.length),!0},current:function(){return this.string.slice(this.start,this.pos)}},a.StringStream=o,p.prototype={attach:function(a){this.marker.set.push(a)},detach:function(a){var b=cb(this.marker.set,a);b>-1&&this.marker.set.splice(b,1)},split:function(a,b){if(this.to<=a&&this.to!=null)return null;var c=this.fromthis.from&&(d=b&&(this.from=Math.max(d,this.from)+e),c&&(bthis.from||this.from==null)?this.to=null:this.to!=null&&this.to>b&&(this.to=d=this.to},sameSet:function(a){return this.marker==a.marker}},q.prototype={attach:function(a){this.line=a},detach:function(a){this.line==a&&(this.line=null)},split:function(a,b){if(athis.to},clipTo:function(a,b,c,d,e){(a||bthis.to)?(this.from=0,this.to=-1):this.from>b&&(this.from=this.to=Math.max(d,this.from)+e)},sameSet:function(a){return!1},find:function(){return!this.line||!this.line.parent?null:{line:w(this.line),ch:this.from}},clear:function(){if(this.line){var a=cb(this.line.marked,this);a!=-1&&this.line.marked.splice(a,1),this.line=null}}},r.inheritMarks=function(a,b){var c=new r(a),d=b&&b.marked;if(d)for(var e=0;e5e3){e[f++]=this.text.slice(d.pos),e[f++]=null;break}}return e.length!=f&&(e.length=f,g=!0),f&&e[f-2]!=i&&(g=!0),g||(e.length<5&&this.text.length<10?null:!1)},getTokenAt:function(a,b,c){var d=this.text,e=new o(d);while(e.pos',g,"
"):c.push(g)}function k(a){return a?"cm-"+a.replace(/ +/g," cm-"):null}var c=[],d=!0,e=0,g=this.styles,h=this.text,i=this.marked,j=h.length;b!=null&&(j=Math.min(b,j));if(!h&&b==null)f(" ");else if(!i||!i.length)for(var l=0,m=0;mj&&(n=n.slice(0,j-m)),m+=p,f(n,k(o))}else{var q=0,l=0,r="",o,s=0,t=i[0].from||0,u=[],v=0;function w(){var a;while(vy?r.slice(0,y-q):r,A);if(z>=y){r=r.slice(y-q),q=y;break}q=z}r=g[l++],o=k(g[l++])}}}return c.join("")},cleanUp:function(){this.parent=null;if(this.marked)for(var a=0,b=this.marked.length;a50){while(f.lines.length>50){var h=f.lines.splice(f.lines.length-25,25),i=new t(h);f.height-=i.height,this.children.splice(d+1,0,i),i.parent=this}this.maybeSpill()}break}a-=g}},maybeSpill:function(){if(this.children.length<=10)return;var a=this;do{var b=a.children.splice(a.children.length-5,5),c=new u(b);if(!a.parent){var d=new u(a.children);d.parent=a,a.children=[d,c],a=d}else{a.size-=c.size,a.height-=c.height;var e=cb(a.parent.children,a);a.parent.children.splice(e+1,0,c)}c.parent=a.parent}while(a.children.length>10);a.parent.maybeSpill()},iter:function(a,b,c){this.iterN(a,b-a,c)},iterN:function(a,b,c){for(var d=0,e=this.children.length;d400||!f)this.done.push([{start:a,added:b,old:c}]);else if(f.start>a+c.length||f.start+f.added=0;--i)f.old.unshift(c[i]);h=Math.min(0,b-c.length),f.added+=f.start-a+h,f.start=a}else f.start-1&&(S="\r\n")})(),document.documentElement.getBoundingClientRect!=null&&(V=function(a,b){try{var c=a.getBoundingClientRect();c={top:c.top,left:c.left}}catch(d){c={top:0,left:0}}if(!b)if(window.pageYOffset==null){var e=document.documentElement||document.body.parentNode;e.scrollTop==null&&(e=document.body),c.top+=e.scrollTop,c.left+=e.scrollLeft}else c.top+=window.pageYOffset,c.left+=window.pageXOffset;return c});var _=document.createElement("pre");ab("a")=="\na"?ab=function(a){return _.textContent=a,_.innerHTML.slice(1)}:ab(" ")!=" "&&(ab=function(a){return _.innerHTML="",_.appendChild(document.createTextNode(a)),_.innerHTML}),a.htmlEscape=ab;var eb="\n\nb".split(/\n/).length!=3?function(a){var b=0,c,d=[];while((c=a.indexOf("\n",b))>-1)d.push(a.slice(b,a.charAt(c-1)=="\r"?c-1:c)),b=c+1;return d.push(a.slice(b)),d}:function(a){return a.split(/\r?\n/)};a.splitLines=eb;var fb=window.getSelection?function(a){try{return a.selectionStart!=a.selectionEnd}catch(b){return!1}}:function(a){try{var b=a.ownerDocument.selection.createRange()}catch(c){}return!b||b.parentElement()!=a?!1:b.compareEndPoints("StartToEnd",b)!=0};a.defineMode("null",function(){return{token:function(a){a.skipToEnd()}}}),a.defineMIME("text/plain","null");var gb={3:"Enter",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",91:"Mod",92:"Mod",93:"Mod",127:"Delete",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63276:"PageUp",63277:"PageDown",63275:"End",63273:"Home",63234:"Left",63232:"Up",63235:"Right",63233:"Down",63302:"Insert",63272:"Delete"};return a.keyNames=gb,function(){for(var a=0;a<10;a++)gb[a+48]=String(a);for(var a=65;a<=90;a++)gb[a]=String.fromCharCode(a);for(var a=1;a<=12;a++)gb[a+111]=gb[a+63235]="F"+a}(),a}();CodeMirror.defineMode("diff",function(){return{token:function(a){var b=a.next();a.skipToEnd();if(b=="+")return"plus";if(b=="-")return"minus";if(b=="@")return"rangeinfo"}}}),CodeMirror.defineMIME("text/x-diff","diff"),CodeMirror.defineMode("htmlembedded",function(a,b){function g(a,b){return a.match(c,!1)?(b.token=h,e.token(a,b.scriptState)):f.token(a,b.htmlState)}function h(a,b){return a.match(d,!1)?(b.token=g,f.token(a,b.htmlState)):e.token(a,b.scriptState)}var c=b.scriptStartRegex||/^<%/i,d=b.scriptEndRegex||/^%>/i,e,f;return{startState:function(){return e=e||CodeMirror.getMode(a,b.scriptingModeSpec),f=f||CodeMirror.getMode(a,"htmlmixed"),{token:b.startOpen?h:g,htmlState:f.startState(),scriptState:e.startState()}},token:function(a,b){return b.token(a,b)},indent:function(a,b){return a.token==g?f.indent(a.htmlState,b):e.indent(a.scriptState,b)},copyState:function(a){return{token:a.token,htmlState:CodeMirror.copyState(f,a.htmlState),scriptState:CodeMirror.copyState(e,a.scriptState)}},electricChars:"/{}:"}}),CodeMirror.defineMIME("application/x-ejs",{name:"htmlembedded",scriptingModeSpec:"javascript"}),CodeMirror.defineMIME("application/x-aspx",{name:"htmlembedded",scriptingModeSpec:"text/x-csharp"}),CodeMirror.defineMIME("application/x-jsp",{name:"htmlembedded",scriptingModeSpec:"text/x-java"}),CodeMirror.defineMode("htmlmixed",function(a,b){function f(a,b){var f=c.token(a,b.htmlState);return f=="tag"&&a.current()==">"&&b.htmlState.context&&(/^script$/i.test(b.htmlState.context.tagName)?(b.token=h,b.localState=d.startState(c.indent(b.htmlState,"")),b.mode="javascript"):/^style$/i.test(b.htmlState.context.tagName)&&(b.token=i,b.localState=e.startState(c.indent(b.htmlState,"")),b.mode="css")),f}function g(a,b,c){var d=a.current(),e=d.search(b);return e>-1&&a.backUp(d.length-e),c}function h(a,b){return a.match(/^<\/\s*script\s*>/i,!1)?(b.token=f,b.localState=null,b.mode="html",f(a,b)):g(a,/<\/\s*script\s*>/,d.token(a,b.localState))}function i(a,b){return a.match(/^<\/\s*style\s*>/i,!1)?(b.token=f,b.localState=null,b.mode="html",f(a,b)):g(a,/<\/\s*style\s*>/,e.token(a,b.localState))}var c=CodeMirror.getMode(a,{name:"xml",htmlMode:!0}),d=CodeMirror.getMode(a,"javascript"),e=CodeMirror.getMode(a,"css");return{startState:function(){var a=c.startState();return{token:f,localState:null,mode:"html",htmlState:a}},copyState:function(a){if(a.localState)var b=CodeMirror.copyState(a.token==i?e:d,a.localState);return{token:a.token,localState:b,mode:a.mode,htmlState:CodeMirror.copyState(c,a.htmlState)}},token:function(a,b){return b.token(a,b)},indent:function(a,b){return a.token==f||/^\s*<\//.test(b)?c.indent(a.htmlState,b):a.token==h?d.indent(a.localState,b):e.indent(a.localState,b)},compareStates:function(a,b){return c.compareStates(a.htmlState,b.htmlState)},electricChars:"/{}:"}}),CodeMirror.defineMIME("text/html","htmlmixed"),CodeMirror.defineMode("javascript",function(a,b){function g(a,b,c){return b.tokenize=c,c(a,b)}function h(a,b){var c=!1,d;while((d=a.next())!=null){if(d==b&&!c)return!1;c=!c&&d=="\\"}return c}function k(a,b,c){return i=a,j=c,b}function l(a,b){var c=a.next();if(c=='"'||c=="'")return g(a,b,m(c));if(/[\[\]{}\(\),;\:\.]/.test(c))return k(c);if(c=="0"&&a.eat(/x/i))return a.eatWhile(/[\da-f]/i),k("number","number");if(/\d/.test(c))return a.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/),k("number","number");if(c=="/")return a.eat("*")?g(a,b,n):a.eat("/")?(a.skipToEnd(),k("comment","comment")):b.reAllowed?(h(a,"/"),a.eatWhile(/[gimy]/),k("regexp","string-2")):(a.eatWhile(f),k("operator",null,a.current()));if(c=="#")return a.skipToEnd(),k("error","error");if(f.test(c))return a.eatWhile(f),k("operator",null,a.current());a.eatWhile(/[\w\$_]/);var d=a.current(),i=e.propertyIsEnumerable(d)&&e[d];return i&&b.kwAllowed?k(i.type,i.style,d):k("variable","variable",d)}function m(a){return function(b,c){return h(b,a)||(c.tokenize=l),k("string","string")}}function n(a,b){var c=!1,d;while(d=a.next()){if(d=="/"&&c){b.tokenize=l;break}c=d=="*"}return k("comment","comment")}function p(a,b,c,d,e,f){this.indented=a,this.column=b,this.type=c,this.prev=e,this.info=f,d!=null&&(this.align=d)}function q(a,b){for(var c=a.localVars;c;c=c.next)if(c.name==b)return!0}function r(a,b,c,e,f){var g=a.cc;s.state=a,s.stream=f,s.marked=null,s.cc=g,a.lexical.hasOwnProperty("align")||(a.lexical.align=!0);for(;;){var h=g.length?g.pop():d?D:C;if(h(c,e)){while(g.length&&g[g.length-1].lex)g.pop()();return s.marked?s.marked:c=="variable"&&q(a,e)?"variable-2":b}}}function t(){for(var a=arguments.length-1;a>=0;a--)s.cc.push(arguments[a])}function u(){return t.apply(null,arguments),!0}function v(a){var b=s.state;if(b.context){s.marked="def";for(var c=b.localVars;c;c=c.next)if(c.name==a)return;b.localVars={name:a,next:b.localVars}}}function x(){s.state.context||(s.state.localVars=w),s.state.context={prev:s.state.context,vars:s.state.localVars}}function y(){s.state.localVars=s.state.context.vars,s.state.context=s.state.context.prev}function z(a,b){var c=function(){var c=s.state;c.lexical=new p(c.indented,s.stream.column(),a,null,c.lexical,b)};return c.lex=!0,c}function A(){var a=s.state;a.lexical.prev&&(a.lexical.type==")"&&(a.indented=a.lexical.indented),a.lexical=a.lexical.prev)}function B(a){return function(c){return c==a?u():a==";"?t():u(arguments.callee)}}function C(a){return a=="var"?u(z("vardef"),L,B(";"),A):a=="keyword a"?u(z("form"),D,C,A):a=="keyword b"?u(z("form"),C,A):a=="{"?u(z("}"),K,A):a==";"?u():a=="function"?u(R):a=="for"?u(z("form"),B("("),z(")"),N,B(")"),A,C,A):a=="variable"?u(z("stat"),G):a=="switch"?u(z("form"),D,z("}","switch"),B("{"),K,A,A):a=="case"?u(D,B(":")):a=="default"?u(B(":")):a=="catch"?u(z("form"),x,B("("),S,B(")"),C,A,y):t(z("stat"),D,B(";"),A)}function D(a){return o.hasOwnProperty(a)?u(F):a=="function"?u(R):a=="keyword c"?u(E):a=="("?u(z(")"),E,B(")"),A,F):a=="operator"?u(D):a=="["?u(z("]"),J(D,"]"),A,F):a=="{"?u(z("}"),J(I,"}"),A,F):u()}function E(a){return a.match(/[;\}\)\],]/)?t():t(D)}function F(a,b){if(a=="operator"&&/\+\+|--/.test(b))return u(F);if(a=="operator")return u(D);if(a==";")return;if(a=="(")return u(z(")"),J(D,")"),A,F);if(a==".")return u(H,F);if(a=="[")return u(z("]"),D,B("]"),A,F)}function G(a){return a==":"?u(A,C):t(F,B(";"),A)}function H(a){if(a=="variable")return s.marked="property",u()}function I(a){a=="variable"&&(s.marked="property");if(o.hasOwnProperty(a))return u(B(":"),D)}function J(a,b){function c(d){return d==","?u(a,c):d==b?u():u(B(b))}return function(e){return e==b?u():t(a,c)}}function K(a){return a=="}"?u():t(C,K)}function L(a,b){return a=="variable"?(v(b),u(M)):u()}function M(a,b){if(b=="=")return u(D,M);if(a==",")return u(L)}function N(a){return a=="var"?u(L,P):a==";"?t(P):a=="variable"?u(O):t(P)}function O(a,b){return b=="in"?u(D):u(F,P)}function P(a,b){return a==";"?u(Q):b=="in"?u(D):u(D,B(";"),Q)}function Q(a){a!=")"&&u(D)}function R(a,b){if(a=="variable")return v(b),u(R);if(a=="(")return u(z(")"),x,J(S,")"),A,C,y)}function S(a,b){if(a=="variable")return v(b),u()}var c=a.indentUnit,d=b.json,e=function(){function a(a){return{type:a,style:"keyword"}}var b=a("keyword a"),c=a("keyword b"),d=a("keyword c"),e=a("operator"),f={type:"atom",style:"atom"};return{"if":b,"while":b,"with":b,"else":c,"do":c,"try":c,"finally":c,"return":d,"break":d,"continue":d,"new":d,"delete":d,"throw":d,"var":a("var"),"const":a("var"),let:a("var"),"function":a("function"),"catch":a("catch"),"for":a("for"),"switch":a("switch"),"case":a("case"),"default":a("default"),"in":e,"typeof":e,"instanceof":e,"true":f,"false":f,"null":f,"undefined":f,NaN:f,Infinity:f}}(),f=/[+\-*&%=<>!?|]/,i,j,o={atom:!0,number:!0,variable:!0,string:!0,regexp:!0},s={state:null,column:null,marked:null,cc:null},w={name:"this",next:{name:"arguments"}};return A.lex=!0,{startState:function(a){return{tokenize:l,reAllowed:!0,kwAllowed:!0,cc:[],lexical:new p((a||0)-c,0,"block",!1),localVars:b.localVars,context:b.localVars&&{vars:b.localVars},indented:0}},token:function(a,b){a.sol()&&(b.lexical.hasOwnProperty("align")||(b.lexical.align=!1),b.indented=a.indentation());if(a.eatSpace())return null;var c=b.tokenize(a,b);return i=="comment"?c:(b.reAllowed=i=="operator"||i=="keyword c"||!!i.match(/^[\[{}\(,;:]$/),b.kwAllowed=i!=".",r(b,c,i,j,a))},indent:function(a,b){if(a.tokenize!=l)return 0;var d=b&&b.charAt(0),e=a.lexical,f=e.type,g=d==f;return f=="vardef"?e.indented+4:f=="form"&&d=="{"?e.indented:f=="stat"||f=="form"?e.indented+c:e.info=="switch"&&!g?e.indented+(/^(?:case|default)\b/.test(b)?c:2*c):e.align?e.column+(g?0:1):e.indented+(g?0:c)},electricChars:":{}"}}),CodeMirror.defineMIME("text/javascript","javascript"),CodeMirror.defineMIME("application/json",{name:"javascript",json:!0}),CodeMirror.defineMode("markdown",function(a,b){function s(a,b,c){return b.f=b.inline=c,c(a,b)}function t(a,b,c){return b.f=b.block=c,c(a,b)}function u(a){return a.em=!1,a.strong=!1,null}function v(a,b){var c;if(b.indentationDiff>=4)return b.indentation-=b.indentationDiff,a.skipToEnd(),e;if(a.eatSpace())return null;if(a.peek()==="#"||a.match(q))b.header=!0;else if(a.eat(">"))b.indentation++,b.quote=!0;else{if(a.peek()==="[")return s(a,b,C);if(a.match(n,!0))return h;if(c=a.match(o,!0)||a.match(p,!0))return b.indentation+=c[0].length,g}return s(a,b,b.inline)}function w(a,b){var d=c.token(a,b.htmlState);return d==="tag"&&b.htmlState.type!=="openTag"&&!b.htmlState.context&&(b.f=z,b.block=v),d}function x(a){var b=[];return a.strong?b.push(a.em?m:l):a.em&&b.push(k),a.header&&b.push(d),a.quote&&b.push(f),b.length?b.join(" "):null}function y(a,b){return a.match(r,!0)?x(b):undefined}function z(a,b){var c=b.text(a,b);if(typeof c!="undefined")return c;var d=a.next();if(d==="\\")return a.next(),x(b);if(d==="`")return s(a,b,F(e,"`"));if(d==="[")return s(a,b,A);if(d==="<"&&a.match(/^\w/,!1))return a.backUp(1),t(a,b,w);var f=x(b);return d==="*"||d==="_"?a.eat(d)?(b.strong=!b.strong)?x(b):f:(b.em=!b.em)?x(b):f:x(b)}function A(a,b){while(!a.eol()){var c=a.next();c==="\\"&&a.next();if(c==="]")return b.inline=b.f=B,i}return i}function B(a,b){a.eatSpace();var c=a.next();return c==="("||c==="["?s(a,b,F(j,c==="("?")":"]")):"error"}function C(a,b){return a.match(/^[^\]]*\]:/,!0)?(b.f=D,i):s(a,b,z)}function D(a,b){return a.eatSpace(),a.match(/^[^\s]+/,!0),b.f=b.inline=z,j}function E(a){return E[a]||(E[a]=new RegExp("^(?:[^\\\\\\"+a+"]|\\\\.)*(?:\\"+a+"|$)")),E[a]}function F(a,b,c){return c=c||z,function(d,e){return d.match(E(b)),e.inline=e.f=c,a}}var c=CodeMirror.getMode(a,{name:"xml",htmlMode:!0}),d="header",e="comment",f="quote",g="string",h="hr",i="link",j="string",k="em",l="strong",m="emstrong",n=/^([*\-=_])(?:\s*\1){2,}\s*$/,o=/^[*\-+]\s+/,p=/^[0-9]+\.\s+/,q=/^(?:\={3,}|-{3,})$/,r=/^[^\[*_\\<>`]+/;return{startState:function(){return{f:v,block:v,htmlState:c.startState(),indentation:0,inline:z,text:y,em:!1,strong:!1,header:!1,quote:!1}},copyState:function(a){return{f:a.f,block:a.block,htmlState:CodeMirror.copyState(c,a.htmlState),indentation:a.indentation,inline:a.inline,text:a.text,em:a.em,strong:a.strong,header:a.header,quote:a.quote}},token:function(a,b){if(a.sol()){if(a.match(/^\s*$/,!0))return u(b);b.header=!1,b.quote=!1,b.f=b.block;var c=a.match(/^\s*/,!0)[0].replace(/\t/g," ").length;b.indentationDiff=c-b.indentation,b.indentation=c;if(c>0)return null}return b.f(a,b)},blankLine:u,getType:x}}),CodeMirror.defineMIME("text/x-markdown","markdown"),CodeMirror.defineMode("python",function(a,b){function d(a){return new RegExp("^(("+a.join(")|(")+"))\\b")}function t(a,b){if(a.sol()){var d=b.scopes[0].offset;if(a.eatSpace()){var l=a.indentation();return l>d?s="indent":l0&&w(a,b)}if(a.eatSpace())return null;var m=a.peek();if(m==="#")return a.skipToEnd(),"comment";if(a.match(/^[0-9\.]/,!1)){var n=!1;a.match(/^\d*\.\d+(e[\+\-]?\d+)?/i)&&(n=!0),a.match(/^\d+\.\d*/)&&(n=!0),a.match(/^\.\d+/)&&(n=!0);if(n)return a.eat(/J/i),"number";var o=!1;a.match(/^0x[0-9a-f]+/i)&&(o=!0),a.match(/^0b[01]+/i)&&(o=!0),a.match(/^0o[0-7]+/i)&&(o=!0),a.match(/^[1-9]\d*(e[\+\-]?\d+)?/)&&(a.eat(/J/i),o=!0),a.match(/^0(?![\dx])/i)&&(o=!0);if(o)return a.eat(/L/i),"number"}return a.match(p)?(b.tokenize=u(a.current()),b.tokenize(a,b)):a.match(i)||a.match(h)?null:a.match(g)||a.match(e)||a.match(k)?"operator":a.match(f)?null:a.match(q)?"keyword":a.match(r)?"builtin":a.match(j)?"variable":(a.next(),c)}function u(a){while("rub".indexOf(a.charAt(0).toLowerCase())>=0)a=a.substr(1);var d=a.length==1,e="string";return function(g,h){while(!g.eol()){g.eatWhile(/[^'"\\]/);if(g.eat("\\")){g.next();if(d&&g.eol())return e}else{if(g.match(a))return h.tokenize=t,e;g.eat(/['"]/)}}if(d){if(b.singleLineStringErrors)return c;h.tokenize=t}return e}}function v(b,c,d){d=d||"py";var e=0;if(d==="py"){if(c.scopes[0].type!=="py"){c.scopes[0].offset=b.indentation();return}for(var f=0;f0&&a.eol()&&b.scopes[0].type=="py"&&(b.scopes.length>1&&b.scopes.shift(),b.dedent-=1),d))}var c="error",e=new RegExp("^[\\+\\-\\*/%&|\\^~<>!]"),f=new RegExp("^[\\(\\)\\[\\]\\{\\}@,:`=;\\.]"),g=new RegExp("^((==)|(!=)|(<=)|(>=)|(<>)|(<<)|(>>)|(//)|(\\*\\*))"),h=new RegExp("^((\\+=)|(\\-=)|(\\*=)|(%=)|(/=)|(&=)|(\\|=)|(\\^=))"),i=new RegExp("^((//=)|(>>=)|(<<=)|(\\*\\*=))"),j=new RegExp("^[_A-Za-z][_A-Za-z0-9]*"),k=d(["and","or","not","is","in"]),l=["as","assert","break","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","lambda","pass","raise","return","try","while","with","yield"],m=["abs","all","any","bin","bool","bytearray","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip","__import__","NotImplemented","Ellipsis","__debug__"],n={builtins:["apply","basestring","buffer","cmp","coerce","execfile","file","intern","long","raw_input","reduce","reload","unichr","unicode","xrange","False","True","None"],keywords:["exec","print"]},o={builtins:["ascii","bytes","exec","print"],keywords:["nonlocal","False","True","None"]};if(!b.version||parseInt(b.version,10)!==3){l=l.concat(n.keywords),m=m.concat(n.builtins);var p=new RegExp("^(([rub]|(ur)|(br))?('{3}|\"{3}|['\"]))","i")}else{l=l.concat(o.keywords),m=m.concat(o.builtins);var p=new RegExp("^(([rb]|(br))?('{3}|\"{3}|['\"]))","i")}var q=d(l),r=d(m),s=null,y={startState:function(a){return{tokenize:t,scopes:[{offset:a||0,type:"py"}],lastToken:null,lambda:!1,dedent:0}},token:function(a,b){var c=x(a,b);return b.lastToken={style:c,content:a.current()},a.eol()&&a.lambda&&(b.lambda=!1),c},indent:function(a,b){return a.tokenize!=t?0:a.scopes[0].offset}};return y}),CodeMirror.defineMIME("text/x-python","python"),CodeMirror.defineMode("xml",function(a,b){function h(a,b){function c(c){return b.tokenize=c,c(a,b)}var d=a.next();if(d=="<"){if(a.eat("!"))return a.eat("[")?a.match("CDATA[")?c(k("atom","]]>")):null:a.match("--")?c(k("comment","-->")):a.match("DOCTYPE",!0,!0)?(a.eatWhile(/[\w\._\-]/),c(l(1))):null;if(a.eat("?"))return a.eatWhile(/[\w\._\-]/),b.tokenize=k("meta","?>"),"meta";g=a.eat("/")?"closeTag":"openTag",a.eatSpace(),f="";var e;while(e=a.eat(/[^\s\u00a0=<>\"\'\/?]/))f+=e;return b.tokenize=i,"tag"}if(d=="&"){var h;return a.eat("#")?a.eat("x")?h=a.eatWhile(/[a-fA-F\d]/)&&a.eat(";"):h=a.eatWhile(/[\d]/)&&a.eat(";"):h=a.eatWhile(/[\w\.\-:]/)&&a.eat(";"),h?"atom":"error"}return a.eatWhile(/[^&<]/),null}function i(a,b){var c=a.next();return c==">"||c=="/"&&a.eat(">")?(b.tokenize=h,g=c==">"?"endTag":"selfcloseTag","tag"):c=="="?(g="equals",null):/[\'\"]/.test(c)?(b.tokenize=j(c),b.tokenize(a,b)):(a.eatWhile(/[^\s\u00a0=<>\"\'\/?]/),"word")}function j(a){return function(b,c){while(!b.eol())if(b.next()==a){c.tokenize=i;break}return"string"}}function k(a,b){return function(c,d){while(!c.eol()){if(c.match(b)){d.tokenize=h;break}c.next()}return a}}function l(a){return function(b,c){var d;while((d=b.next())!=null){if(d=="<")return c.tokenize=l(a+1),c.tokenize(b,c);if(d==">"){if(a==1){c.tokenize=h;break}return c.tokenize=l(a-1),c.tokenize(b,c)}}return"meta"}}function o(){for(var a=arguments.length-1;a>=0;a--)m.cc.push(arguments[a])}function p(){return o.apply(null,arguments),!0}function q(a,b){var c=d.doNotIndent.hasOwnProperty(a)||m.context&&m.context.noIndent;m.context={prev:m.context,tagName:a,indent:m.indented,startOfLine:b,noIndent:c}}function r(){m.context&&(m.context=m.context.prev)}function s(a){if(a=="openTag")return m.tagName=f,p(v,t(m.startOfLine));if(a=="closeTag"){var b=!1;return m.context?b=m.context.tagName!=f:b=!0,b&&(n="error"),p(u(b))}return p()}function t(a){return function(b){return b=="selfcloseTag"||b=="endTag"&&d.autoSelfClosers.hasOwnProperty(m.tagName.toLowerCase())?p():b=="endTag"?(q(m.tagName,a),p()):p()}}function u(a){return function(b){return a&&(n="error"),b=="endTag"?(r(),p()):(n="error",p(arguments.callee))}}function v(a){return a=="word"?(n="attribute",p(w,v)):a=="endTag"||a=="selfcloseTag"?o():(n="error",p(v))}function w(a){return a=="equals"?p(x,v):(d.allowMissing||(n="error"),a=="endTag"||a=="selfcloseTag"?o():p())}function x(a){return a=="string"?p(y):a=="word"&&d.allowUnquoted?(n="string",p()):(n="error",a=="endTag"||a=="selfCloseTag"?o():p())}function y(a){return a=="string"?p(y):o()}var c=a.indentUnit,d=b.htmlMode?{autoSelfClosers:{br:!0,img:!0,hr:!0,link:!0,input:!0,meta:!0,col:!0,frame:!0,base:!0,area:!0},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!1}:{autoSelfClosers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1},e=b.alignCDATA,f,g,m,n;return{startState:function(){return{tokenize:h,cc:[],indented:0,startOfLine:!0,tagName:null,context:null}},token:function(a,b){a.sol()&&(b.startOfLine=!0,b.indented=a.indentation());if(a.eatSpace())return null;n=g=f=null;var c=b.tokenize(a,b);b.type=g;if((c||g)&&c!="comment"){m=b;for(;;){var d=b.cc.pop()||s;if(d(g||c))break}}return b.startOfLine=!1,n||c},indent:function(a,b,d){var f=a.context;if(a.tokenize!=i&&a.tokenize!=h||f&&f.noIndent)return d?d.match(/^(\s*)/)[0].length:0;if(e&&/c.keyCol)return a.skipToEnd(),"string";c.literal&&(c.literal=!1);if(a.sol()){c.keyCol=0,c.pair=!1,c.pairStart=!1;if(a.match(/---/))return"def";if(a.match(/\.\.\./))return"def";if(a.match(/\s*-\s+/))return"meta"}if(!c.pair&&a.match(/^\s*([a-z0-9\._-])+(?=\s*:)/i))return c.pair=!0,c.keyCol=a.indentation(),"atom";if(c.pair&&a.match(/^:\s*/))return c.pairStart=!0,"meta";if(a.match(/^(\{|\}|\[|\])/))return d=="{"?c.inlinePairs++:d=="}"?c.inlinePairs--:d=="["?c.inlineList++:c.inlineList--,"meta";if(c.inlineList>0&&!e&&d==",")return a.next(),"meta";if(c.inlinePairs>0&&!e&&d==",")return c.keyCol=0,c.pair=!1,c.pairStart=!1,a.next(),"meta";if(c.pairStart){if(a.match(/^\s*(\||\>)\s*/))return c.literal=!0,"meta";if(a.match(/^\s*(\&|\*)[a-z0-9\._-]+\b/i))return"variable-2";if(c.inlinePairs==0&&a.match(/^\s*-?[0-9\.\,]+\s?$/))return"number";if(c.inlinePairs>0&&a.match(/^\s*-?[0-9\.\,]+\s?(?=(,|}))/))return"number";if(a.match(b))return"keyword"}return c.pairStart=!1,c.escaped=d=="\\",a.next(),null},startState:function(){return{pair:!1,pairStart:!1,keyCol:0,inlinePairs:0,inlineList:0,literal:!1,escaped:!1}}}}),CodeMirror.defineMIME("text/x-yaml","yaml"),CodeMirror.runMode=function(a,b,c,d){var e=CodeMirror.getMode(CodeMirror.defaults,b),f=c.nodeType==1,g=d&&d.tabSize||CodeMirror.defaults.tabSize;if(f){var h=c,i=[],j=0;c=function(a,b){if(a=="\n"){i.push("
"),j=0;return}var c="";for(var d=0;;){var e=a.indexOf(" ",d);if(e==-1){c+=CodeMirror.htmlEscape(a.slice(d)),j+=a.length-d;break}j+=e-d,c+=CodeMirror.htmlEscape(a.slice(d,e));var f=g-j%g;j+=f;for(var h=0;h'+c+""):i.push(c)}}var k=CodeMirror.splitLines(a),l=CodeMirror.startState(e);for(var m=0,n=k.length;m",i+1);if(-1==j){var k=b+1,l=!1,m=a.lineCount();while(k");if(-1!=o){l=!0;var p=n.lastIndexOf("/",o);if(-1!=p&&p/))return k+1}}k++}g=!0}else{var r=f.lastIndexOf("/",j);if(-1==r)g=!0;else{var q=f.substr(r,j-r+1);q.match(/\/\s*\>/)||(g=!0)}}if(g){var s=f.substr(i+1);h=s.match(e),h?(h=h[0],-1!=f.indexOf("",i)&&(g=!1)):g=!1}g||i++}if(g){var t="(\\<\\/"+h+"\\>)|(\\<"+h+"\\>)|(\\<"+h+"\\s)|(\\<"+h+"$)",u=new RegExp(t,"g"),v="",w=1,k=b+1,m=a.lineCount();while(kd)return;var e=a.getTokenAt({line:b,ch:d}).className,f=1,g=a.lineCount(),h;a:for(var i=b+1;i▼%N%'),function(f,g){f.operation(function(){var h=d(f,g);if(h)c.splice(h.pos,1),e(f,h.region);else{var i=a(f,g);if(i==null)return;var j=[];for(var k=g+1;k=g&&(h=f.lastIndexOf(b,d.ch-g))!=-1:(h=f.indexOf(b,d.ch))!=-1)return{from:{line:d.line,ch:h},to:{line:d.line,ch:h+g}}}:this.matches=function(b,c){var d=c.line,g=b?f.length-1:0,h=f[g],i=e(a.getLine(d)),j=b?i.indexOf(h)+h.length:i.lastIndexOf(h);if(b?j>=c.ch||j!=h.length:j<=c.ch||j!=i.length-h.length)return;for(;;){if(b?!d:d==a.lineCount()-1)return;i=e(a.getLine(d+=b?-1:1)),h=f[b?--g:++g];if(g>0&&g-1&&h>-1&&h>g&&(f=f.substr(0,g)+f.substring(g+d.commentStart.length,h)+f.substr(h+d.commentEnd.length)),this.replaceRange(f,b,c)}}),CodeMirror.defineExtension("autoIndentRange",function(a,b){var c=this;this.operation(function(){for(var d=a.line;d<=b.line;d++)c.indentLine(d,"smart")})}),CodeMirror.defineExtension("autoFormatRange",function(a,b){var c=this.indexFromPos(a),d=this.indexFromPos(b),e=this.getModeExt().autoFormatLineBreaks(this.getValue(),c,d),f=this;this.operation(function(){f.replaceRange(e,a,b);var d=f.posFromIndex(c).line,g=f.posFromIndex(c+e.length).line;for(var h=d;h<=g;h++)f.indentLine(h,"smart")})}),CodeMirror.modeExtensions.css={commentStart:"/*",commentEnd:"*/",wordWrapChars:[";","\\{","\\}"],autoFormatLineBreaks:function(a){return a.replace(new RegExp("(;|\\{|\\})([^\r\n])","g"),"$1\n$2")}},CodeMirror.modeExtensions.javascript={commentStart:"/*",commentEnd:"*/",wordWrapChars:[";","\\{","\\}"],getNonBreakableBlocks:function(a){var b=[new RegExp("for\\s*?\\(([\\s\\S]*?)\\)"),new RegExp("'([\\s\\S]*?)('|$)"),new RegExp('"([\\s\\S]*?)("|$)'),new RegExp("//.*([\r\n]|$)")],c=new Array;for(var d=0;db&&(e+=a.substring(b,d[f].start).replace(c,"$1\n$2"),b=d[f].start),d[f].start<=b&&d[f].end>=b&&(e+=a.substring(b,d[f].end),b=d[f].end);return b",wordWrapChars:[">"],autoFormatLineBreaks:function(a){var b=a.split("\n"),c=new RegExp("(^\\s*?<|^[^<]*?)(.+)(>\\s*?$|[^>]*?$)"),d=new RegExp("<","g"),e=new RegExp("(>)([^\r\n])","g");for(var f=0;f3){b[f]=g[1]+g[2].replace(d,"\n$&").replace(e,"$1\n$2")+g[3];continue}}return b.join("\n")}},CodeMirror.modeExtensions.htmlmixed={commentStart:"",wordWrapChars:[">",";","\\{","\\}"],getModeInfos:function(a,b){var c=new Array;c[0]={pos:0,modeExt:CodeMirror.modeExtensions.xml,modeName:"xml"};var d=new Array;d[0]={regex:new RegExp("]*>([\\s\\S]*?)(]*>|$)","i"),modeExt:CodeMirror.modeExtensions.css,modeName:"css"},d[1]={regex:new RegExp("]*>([\\s\\S]*?)(]*>|$)","i"),modeExt:CodeMirror.modeExtensions.javascript,modeName:"javascript"};var e=typeof b!="undefined"?b:a.length-1;for(var f=0;f1&&h[1].length>0){var i=g+h.index+h[0].indexOf(h[1]);c.push({pos:i,modeExt:d[f].modeExt,modeName:d[f].modeName}),c.push({pos:i+h[1].length,modeExt:c[0].modeExt,modeName:c[0].modeName}),g+=h.index+h[0].length;continue}g+=h.index+Math.max(h[0].length,1)}}return c.sort(function(b,c){return b.pos-c.pos}),c},autoFormatLineBreaks:function(a,b,c){var d=this.getModeInfos(a),e=new RegExp("^\\s*?\n"),f=new RegExp("\n\\s*?$"),g="";if(d.length>1)for(var h=1;h<=d.length;h++){var i=d[h-1].pos,j=h=c)break;if(ic&&(j=c);var k=a.substring(i,j);d[h-1].modeName!="xml"&&(!e.test(k)&&i>0&&(k="\n"+k),!f.test(k)&&j=f){var g=c(b),h=b.getSelection();b.operation(function(){if(b.lineCount()<2e3)for(var a=b.getSearchCursor(h);a.findNext();)(a.from().line!==b.getCursor(!0).line||a.from().ch!==b.getCursor(!0).ch)&&g.marked.push(b.markText(a.from(),a.to(),e))})}}var a=2;CodeMirror.defineExtension("matchHighlight",function(a,b){e(this,a,b)})}(),function(){function a(a,c,d,e){b(a,c,e)?(a.replaceSelection("\n\n","end"),a.indentLine(d.line+1),a.indentLine(d.line+2),a.setCursor({line:d.line+1,ch:a.getLine(d.line+1).length})):(a.replaceSelection(""),a.setCursor(d))}function b(a,b,d){if(typeof b=="undefined"||b==null||b==1)b=a.getOption("closeTagIndent");return b||(b=[]),c(b,d.toLowerCase())!=-1}function c(a,b){if(a.indexOf)return a.indexOf(b);for(var c=0,d=a.length;c"),a.setCursor({line:b.line,ch:b.ch+c.length+2})}CodeMirror.defaults.closeTagEnabled=!0,CodeMirror.defaults.closeTagIndent=["applet","blockquote","body","button","div","dl","fieldset","form","frameset","h1","h2","h3","h4","h5","h6","head","html","iframe","layer","legend","object","ol","p","select","table","ul"],CodeMirror.defineExtension("closeTag",function(b,c,e){if(!b.getOption("closeTagEnabled"))throw CodeMirror.Pass;var f=b.getOption("mode");if(f=="text/html"){var g=b.getCursor(),h=b.getTokenAt(g),i=h.state;if(i.mode&&i.mode!="html")throw CodeMirror.Pass;if(c==">"){var j=i.htmlState?i.htmlState.type:i.type;if(h.className=="tag"&&j=="closeTag")throw CodeMirror.Pass;b.replaceSelection(">"),g={line:g.line,ch:g.ch+1},b.setCursor(g),h=b.getTokenAt(b.getCursor()),i=h.state,j=i.htmlState?i.htmlState.type:i.type;if(h.className=="tag"&&j!="selfcloseTag"){var k=i.htmlState?i.htmlState.context.tagName:i.tagName;k.length>0&&a(b,e,g,k);return}b.setSelection({line:g.line,ch:g.ch-1},g),b.replaceSelection("")}else if(c=="/"&&h.className=="tag"&&h.string=="<"){var k=i.htmlState?i.htmlState.context?i.htmlState.context.tagName:"":i.context.tagName;if(k.length>0){d(b,g,k);return}}}else if(f=="xmlpure"){var g=b.getCursor(),h=b.getTokenAt(g),k=h.state.context.tagName;if(c==">"){if(h.string==k){b.replaceSelection(">"),g={line:g.line,ch:g.ch+1},b.setCursor(g),a(b,e,g,k);return}}else if(c=="/"&&h.string=="<"){d(b,g,k);return}}throw CodeMirror.Pass})}(),function(){function b(b){a.push(b),a.length>50&&a.shift()}function c(){return a[a.length-1]||""}function d(){return a.length>1&&a.pop(),c()}var a=[];CodeMirror.keyMap.emacs={"Ctrl-X":function(a){a.setOption("keyMap","emacs-Ctrl-X")},"Ctrl-W":function(a){b(a.getSelection()),a.replaceSelection("")},"Ctrl-Alt-W":function(a){b(a.getSelection()),a.replaceSelection("")},"Alt-W":function(a){b(a.getSelection())},"Ctrl-Y":function(a){a.replaceSelection(c())},"Alt-Y":function(a){a.replaceSelection(d())},"Ctrl-/":"undo","Shift-Ctrl--":"undo","Shift-Alt-,":"goDocStart","Shift-Alt-.":"goDocEnd","Ctrl-S":"findNext","Ctrl-R":"findPrev","Ctrl-G":"clearSearch","Shift-Alt-5":"replace","Ctrl-Z":"undo","Cmd-Z":"undo",fallthrough:["basic","emacsy"]},CodeMirror.keyMap["emacs-Ctrl-X"]={"Ctrl-S":"save","Ctrl-W":"save",S:"saveAll",F:"open",U:"undo",K:"close",auto:"emacs",catchall:function(a){}}}(),function(){function f(){c=""}function g(a){c+=a}function h(b){return function(c){a+=b}}function i(){var b=parseInt(a);return a="",b||1}function j(a){return typeof a=="string"&&(a=CodeMirror.commands[a]),function(b){for(var c=0,d=i();c0&&(e=a.length,f=0);var g=e,h=e;a:for(;b!=e;b+=c)for(var i=0;id?d:c,h=c>d?c:d;a.setCursor(f);for(var i=f;i<=h;i++)g("\n"+a.getLine(f)),a.removeLine(f)}function s(a,b){var c=e[b],d=a.getCursor().line,f=c>d?d:c,h=c>d?c:d;for(var i=f;i<=h;i++)g("\n"+a.getLine(i));a.setCursor(f)}var a="",b="f",c="",d=0,e=[],l=[/\w/,/[^\w\s]/],m=[/\S/],t=CodeMirror.keyMap.vim={0:function(b){a.length>0?h("0")(b):CodeMirror.commands.goLineStart(b)},A:function(a){i(),a.setCursor(a.getCursor().line,a.getCursor().ch+1,!0),a.setOption("keyMap","vim-insert"),q("vim-insert")},"Shift-A":function(a){i(),CodeMirror.commands.goLineEnd(a),a.setOption("keyMap","vim-insert"),q("vim-insert")},I:function(a){i(),a.setOption("keyMap","vim-insert"),q("vim-insert")},"Shift-I":function(a){i(),CodeMirror.commands.goLineStartSmart(a),a.setOption("keyMap","vim-insert"),q("vim-insert")},O:function(a){i(),CodeMirror.commands.goLineEnd(a),a.replaceSelection("\n","end"),a.setOption("keyMap","vim-insert"),q("vim-insert")},"Shift-O":function(a){i(),CodeMirror.commands.goLineStart(a),a.replaceSelection("\n","start"),a.setOption("keyMap","vim-insert"),q("vim-insert")},G:function(a){a.setOption("keyMap","vim-prefix-g")},D:function(a){a.setOption("keyMap","vim-prefix-d"),f()},M:function(a){a.setOption("keyMap","vim-prefix-m"),e=[]},Y:function(a){a.setOption("keyMap","vim-prefix-y"),f(),d=0},"/":function(a){var c=CodeMirror.commands.find;c&&c(a),b="f"},"Shift-/":function(a){var c=CodeMirror.commands.find;c&&(c(a),CodeMirror.commands.findPrev(a),b="r")},N:function(a){var c=CodeMirror.commands.findNext;c&&(b!="r"?c(a):CodeMirror.commands.findPrev(a))},"Shift-N":function(a){var c=CodeMirror.commands.findNext;c&&(b!="r"?CodeMirror.commands.findPrev(a):c.findNext(a))},"Shift-G":function(b){a==""?b.setCursor(b.lineCount()):b.setCursor(parseInt(a)-1),i(),CodeMirror.commands.goLineStart(b)},catchall:function(a){}};for(var u=1;u<10;++u)t[u]=h(u);k({H:"goColumnLeft",L:"goColumnRight",J:"goLineDown",K:"goLineUp",Left:"goColumnLeft",Right:"goColumnRight",Down:"goLineDown",Up:"goLineUp",Backspace:"goCharLeft",Space:"goCharRight",B:function(a){o(a,l,-1,"end")},E:function(a){o(a,l,1,"end")},W:function(a){o(a,l,1,"start")},"Shift-B":function(a){o(a,m,-1,"end")},"Shift-E":function(a){o(a,m,1,"end")},"Shift-W":function(a){o(a,m,1,"start")},X:function(a){CodeMirror.commands.delCharRight(a)},P:function(a){var b=a.getCursor().line;c!=""&&(CodeMirror.commands.goLineEnd(a),a.replaceSelection(c,"end")),a.setCursor(b+1)},"Shift-X":function(a){CodeMirror.commands.delCharLeft(a)},"Shift-J":function(a){p(a)},"Shift-`":function(a){var b=a.getCursor(),c=a.getRange({line:b.line,ch:b.ch},{line:b.line,ch:b.ch+1});c=c!=c.toLowerCase()?c.toLowerCase():c.toUpperCase(),a.replaceRange(c,{line:b.line,ch:b.ch},{line:b.line,ch:b.ch+1}),a.setCursor(b.line,b.ch+1)},"Ctrl-B":function(a){CodeMirror.commands.goPageUp(a)},"Ctrl-F":function(a){CodeMirror.commands.goPageDown(a)},"Ctrl-P":"goLineUp","Ctrl-N":"goLineDown",U:"undo","Ctrl-R":"redo","Shift-4":"goLineEnd"},function(a,b){t[a]=j(b)}),CodeMirror.keyMap["vim-prefix-g"]={E:j(function(a){o(a,l,-1,"start")}),"Shift-E":j(function(a){o(a,m,-1,"start")}),auto:"vim",catchall:function(a){}},CodeMirror.keyMap["vim-prefix-m"]={A:function(a){e.A=a.getCursor().line},"Shift-A":function(a){e["Shift-A"]=a.getCursor().line},B:function(a){e.B=a.getCursor().line},"Shift-B":function(a){e["Shift-B"]=a.getCursor().line},C:function(a){e.C=a.getCursor().line},"Shift-C":function(a){e["Shift-C"]=a.getCursor().line},D:function(a){e.D=a.getCursor().line},"Shift-D":function(a){e["Shift-D"]=a.getCursor().line},E:function(a){e.E=a.getCursor().line},"Shift-E":function(a){e["Shift-E"]=a.getCursor().line},F:function(a){e.F=a.getCursor().line},"Shift-F":function(a){e["Shift-F"]=a.getCursor().line},G:function(a){e.G=a.getCursor().line},"Shift-G":function(a){e["Shift-G"]=a.getCursor().line},H:function(a){e.H=a.getCursor().line},"Shift-H":function(a){e["Shift-H"]=a.getCursor().line},I:function(a){e.I=a.getCursor().line},"Shift-I":function(a){e["Shift-I"]=a.getCursor().line},J:function(a){e.J=a.getCursor().line},"Shift-J":function(a){e["Shift-J"]=a.getCursor().line},K:function(a){e.K=a.getCursor().line},"Shift-K":function(a){e["Shift-K"]=a.getCursor().line},L:function(a){e.L=a.getCursor().line},"Shift-L":function(a){e["Shift-L"]=a.getCursor().line},M:function(a){e.M=a.getCursor().line},"Shift-M":function(a){e["Shift-M"]=a.getCursor().line},N:function(a){e.N=a.getCursor().line},"Shift-N":function(a){e["Shift-N"]=a.getCursor().line},O:function(a){e.O=a.getCursor().line},"Shift-O":function(a){e["Shift-O"]=a.getCursor().line},P:function(a){e.P=a.getCursor().line},"Shift-P":function(a){e["Shift-P"]=a.getCursor().line},Q:function(a){e.Q=a.getCursor().line},"Shift-Q":function(a){e["Shift-Q"]=a.getCursor().line},R:function(a){e.R=a.getCursor().line},"Shift-R":function(a){e["Shift-R"]=a.getCursor().line},S:function(a){e.S=a.getCursor().line},"Shift-S":function(a){e["Shift-S"]=a.getCursor().line},T:function(a){e.T=a.getCursor().line},"Shift-T":function(a){e["Shift-T"]=a.getCursor().line},U:function(a){e.U=a.getCursor().line},"Shift-U":function(a){e["Shift-U"]=a.getCursor().line},V:function(a){e.V=a.getCursor().line},"Shift-V":function(a){e["Shift-V"]=a.getCursor().line},W:function(a){e.W=a.getCursor().line},"Shift-W":function(a){e["Shift-W"]=a.getCursor().line},X:function(a){e.X=a.getCursor().line},"Shift-X":function(a){e["Shift-X"]=a.getCursor().line},Y:function(a){e.Y=a.getCursor().line},"Shift-Y":function(a){e["Shift-Y"]=a.getCursor().line},Z:function(a){e.Z=a.getCursor().line},"Shift-Z":function(a){e["Shift-Z"]=a.getCursor().line},auto:"vim",catchall:function(a){}},CodeMirror.keyMap["vim-prefix-d"]={D:j(function(a){g("\n"+a.getLine(a.getCursor().line)),a.removeLine(a.getCursor().line)}),"'":function(a){a.setOption("keyMap","vim-prefix-d'"),f()},auto:"vim",catchall:function(a){}},CodeMirror.keyMap["vim-prefix-d'"]={A:function(a){r(a,"A")},"Shift-A":function(a){r(a,"Shift-A")},B:function(a){r(a,"B")},"Shift-B":function(a){r(a,"Shift-B")},C:function(a){r(a,"C")},"Shift-C":function(a){r(a,"Shift-C")},D:function(a){r(a,"D")},"Shift-D":function(a){r(a,"Shift-D")},E:function(a){r(a,"E")},"Shift-E":function(a){r(a,"Shift-E")},F:function(a){r(a,"F")},"Shift-F":function(a){r(a,"Shift-F")},G:function(a){r(a,"G")},"Shift-G":function(a){r(a,"Shift-G")},H:function(a){r(a,"H")},"Shift-H":function(a){r(a,"Shift-H")},I:function(a){r(a,"I")},"Shift-I":function(a){r(a,"Shift-I")},J:function(a){r(a,"J")},"Shift-J":function(a){r(a,"Shift-J")},K:function(a){r(a,"K")},"Shift-K":function(a){r(a,"Shift-K")},L:function(a){r(a,"L")},"Shift-L":function(a){r(a,"Shift-L")},M:function(a){r(a,"M")},"Shift-M":function(a){r(a,"Shift-M")},N:function(a){r(a,"N")},"Shift-N":function(a){r(a,"Shift-N")},O:function(a){r(a,"O")},"Shift-O":function(a){r(a,"Shift-O")},P:function(a){r(a,"P")},"Shift-P":function(a){r(a,"Shift-P")},Q:function(a){r(a,"Q")},"Shift-Q":function(a){r(a,"Shift-Q")},R:function(a){r(a,"R")},"Shift-R":function(a){r(a,"Shift-R")},S:function(a){r(a,"S")},"Shift-S":function(a){r(a,"Shift-S")},T:function(a){r(a,"T")},"Shift-T":function(a){r(a,"Shift-T")},U:function(a){r(a,"U")},"Shift-U":function(a){r(a,"Shift-U")},V:function(a){r(a,"V")},"Shift-V":function(a){r(a,"Shift-V")},W:function(a){r(a,"W")},"Shift-W":function(a){r(a,"Shift-W")},X:function(a){r(a,"X")},"Shift-X":function(a){r(a,"Shift-X")},Y:function(a){r(a,"Y")},"Shift-Y":function(a){r(a,"Shift-Y")},Z:function(a){r(a,"Z")},"Shift-Z":function(a){r(a,"Shift-Z")},auto:"vim",catchall:function(a){}},CodeMirror.keyMap["vim-prefix-y'"]={A:function(a){s(a,"A")},"Shift-A":function(a){s(a,"Shift-A")},B:function(a){s(a,"B")},"Shift-B":function(a){s(a,"Shift-B")},C:function(a){s(a,"C")},"Shift-C":function(a){s(a,"Shift-C")},D:function(a){s(a,"D")},"Shift-D":function(a){s(a,"Shift-D")},E:function(a){s(a,"E")},"Shift-E":function(a){s(a,"Shift-E")},F:function(a){s(a,"F")},"Shift-F":function(a){s(a,"Shift-F")},G:function(a){s(a,"G")},"Shift-G":function(a){s(a,"Shift-G")},H:function(a){s(a,"H")},"Shift-H":function(a){s(a,"Shift-H")},I:function(a){s(a,"I")},"Shift-I":function(a){s(a,"Shift-I")},J:function(a){s(a,"J")},"Shift-J":function(a){s(a,"Shift-J")},K:function(a){s(a,"K")},"Shift-K":function(a){s(a,"Shift-K")},L:function(a){s(a,"L")},"Shift-L":function(a){s(a,"Shift-L")},M:function(a){s(a,"M")},"Shift-M":function(a){s(a,"Shift-M")},N:function(a){s(a,"N")},"Shift-N":function(a){s(a,"Shift-N")},O:function(a){s(a,"O")},"Shift-O":function(a){s(a,"Shift-O")},P:function(a){s(a,"P")},"Shift-P":function(a){s(a,"Shift-P")},Q:function(a){s(a,"Q")},"Shift-Q":function(a){s(a,"Shift-Q")},R:function(a){s(a,"R")},"Shift-R":function(a){s(a,"Shift-R")},S:function(a){s(a,"S")},"Shift-S":function(a){s(a,"Shift-S")},T:function(a){s(a,"T")},"Shift-T":function(a){s(a,"Shift-T")},U:function(a){s(a,"U")},"Shift-U":function(a){s(a,"Shift-U")},V:function(a){s(a,"V")},"Shift-V":function(a){s(a,"Shift-V")},W:function(a){s(a,"W")},"Shift-W":function(a){s(a,"Shift-W")},X:function(a){s(a,"X")},"Shift-X":function(a){s(a,"Shift-X")},Y:function(a){s(a,"Y")},"Shift-Y":function(a){s(a,"Shift-Y")},Z:function(a){s(a,"Z")},"Shift-Z":function(a){s(a,"Shift-Z")},auto:"vim",catchall:function(a){}},CodeMirror.keyMap["vim-prefix-y"]={Y:j(function(a){g("\n"+a.getLine(a.getCursor().line+d)),d++}),"'":function(a){a.setOption("keyMap","vim-prefix-y'"),f()},auto:"vim",catchall:function(a){}},CodeMirror.keyMap["vim-insert"]={Esc:function(a){a.setCursor(a.getCursor().line,a.getCursor().ch-1,!0),a.setOption("keyMap","vim"),q("vim")},"Ctrl-N":function(a){},"Ctrl-P":function(a){},fallthrough:["default"]}}() CodeMirror.defineMode("css", function(config) { var indentUnit = config.indentUnit, type; var atMediaTypes = keySet([ "all", "aural", "braille", "handheld", "print", "projection", "screen", "tty", "tv", "embossed" ]); var atMediaFeatures = keySet([ "width", "min-width", "max-width", "height", "min-height", "max-height", "device-width", "min-device-width", "max-device-width", "device-height", "min-device-height", "max-device-height", "aspect-ratio", "min-aspect-ratio", "max-aspect-ratio", "device-aspect-ratio", "min-device-aspect-ratio", "max-device-aspect-ratio", "color", "min-color", "max-color", "color-index", "min-color-index", "max-color-index", "monochrome", "min-monochrome", "max-monochrome", "resolution", "min-resolution", "max-resolution", "scan", "grid" ]); var propertyKeywords = keySet([ "align-content", "align-items", "align-self", "alignment-adjust", "alignment-baseline", "anchor-point", "animation", "animation-delay", "animation-direction", "animation-duration", "animation-iteration-count", "animation-name", "animation-play-state", "animation-timing-function", "appearance", "azimuth", "backface-visibility", "background", "background-attachment", "background-clip", "background-color", "background-image", "background-origin", "background-position", "background-repeat", "background-size", "baseline-shift", "binding", "bleed", "bookmark-label", "bookmark-level", "bookmark-state", "bookmark-target", "border", "border-bottom", "border-bottom-color", "border-bottom-left-radius", "border-bottom-right-radius", "border-bottom-style", "border-bottom-width", "border-collapse", "border-color", "border-image", "border-image-outset", "border-image-repeat", "border-image-slice", "border-image-source", "border-image-width", "border-left", "border-left-color", "border-left-style", "border-left-width", "border-radius", "border-right", "border-right-color", "border-right-style", "border-right-width", "border-spacing", "border-style", "border-top", "border-top-color", "border-top-left-radius", "border-top-right-radius", "border-top-style", "border-top-width", "border-width", "bottom", "box-decoration-break", "box-shadow", "box-sizing", "break-after", "break-before", "break-inside", "caption-side", "clear", "clip", "color", "color-profile", "column-count", "column-fill", "column-gap", "column-rule", "column-rule-color", "column-rule-style", "column-rule-width", "column-span", "column-width", "columns", "content", "counter-increment", "counter-reset", "crop", "cue", "cue-after", "cue-before", "cursor", "direction", "display", "dominant-baseline", "drop-initial-after-adjust", "drop-initial-after-align", "drop-initial-before-adjust", "drop-initial-before-align", "drop-initial-size", "drop-initial-value", "elevation", "empty-cells", "fit", "fit-position", "flex", "flex-basis", "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap", "float", "float-offset", "font", "font-feature-settings", "font-family", "font-kerning", "font-language-override", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-synthesis", "font-variant", "font-variant-alternates", "font-variant-caps", "font-variant-east-asian", "font-variant-ligatures", "font-variant-numeric", "font-variant-position", "font-weight", "grid-cell", "grid-column", "grid-column-align", "grid-column-sizing", "grid-column-span", "grid-columns", "grid-flow", "grid-row", "grid-row-align", "grid-row-sizing", "grid-row-span", "grid-rows", "grid-template", "hanging-punctuation", "height", "hyphens", "icon", "image-orientation", "image-rendering", "image-resolution", "inline-box-align", "justify-content", "left", "letter-spacing", "line-break", "line-height", "line-stacking", "line-stacking-ruby", "line-stacking-shift", "line-stacking-strategy", "list-style", "list-style-image", "list-style-position", "list-style-type", "margin", "margin-bottom", "margin-left", "margin-right", "margin-top", "marker-offset", "marks", "marquee-direction", "marquee-loop", "marquee-play-count", "marquee-speed", "marquee-style", "max-height", "max-width", "min-height", "min-width", "move-to", "nav-down", "nav-index", "nav-left", "nav-right", "nav-up", "opacity", "order", "orphans", "outline", "outline-color", "outline-offset", "outline-style", "outline-width", "overflow", "overflow-style", "overflow-wrap", "overflow-x", "overflow-y", "padding", "padding-bottom", "padding-left", "padding-right", "padding-top", "page", "page-break-after", "page-break-before", "page-break-inside", "page-policy", "pause", "pause-after", "pause-before", "perspective", "perspective-origin", "pitch", "pitch-range", "play-during", "position", "presentation-level", "punctuation-trim", "quotes", "rendering-intent", "resize", "rest", "rest-after", "rest-before", "richness", "right", "rotation", "rotation-point", "ruby-align", "ruby-overhang", "ruby-position", "ruby-span", "size", "speak", "speak-as", "speak-header", "speak-numeral", "speak-punctuation", "speech-rate", "stress", "string-set", "tab-size", "table-layout", "target", "target-name", "target-new", "target-position", "text-align", "text-align-last", "text-decoration", "text-decoration-color", "text-decoration-line", "text-decoration-skip", "text-decoration-style", "text-emphasis", "text-emphasis-color", "text-emphasis-position", "text-emphasis-style", "text-height", "text-indent", "text-justify", "text-outline", "text-shadow", "text-space-collapse", "text-transform", "text-underline-position", "text-wrap", "top", "transform", "transform-origin", "transform-style", "transition", "transition-delay", "transition-duration", "transition-property", "transition-timing-function", "unicode-bidi", "vertical-align", "visibility", "voice-balance", "voice-duration", "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress", "voice-volume", "volume", "white-space", "widows", "width", "word-break", "word-spacing", "word-wrap", "z-index" ]); var colorKeywords = keySet([ "black", "silver", "gray", "white", "maroon", "red", "purple", "fuchsia", "green", "lime", "olive", "yellow", "navy", "blue", "teal", "aqua" ]); var valueKeywords = keySet([ "above", "absolute", "activeborder", "activecaption", "afar", "after-white-space", "ahead", "alias", "all", "all-scroll", "alternate", "always", "amharic", "amharic-abegede", "antialiased", "appworkspace", "arabic-indic", "armenian", "asterisks", "auto", "avoid", "background", "backwards", "baseline", "below", "bidi-override", "binary", "bengali", "blink", "block", "block-axis", "bold", "bolder", "border", "border-box", "both", "bottom", "break-all", "break-word", "button", "button-bevel", "buttonface", "buttonhighlight", "buttonshadow", "buttontext", "cambodian", "capitalize", "caps-lock-indicator", "caption", "captiontext", "caret", "cell", "center", "checkbox", "circle", "cjk-earthly-branch", "cjk-heavenly-stem", "cjk-ideographic", "clear", "clip", "close-quote", "col-resize", "collapse", "compact", "condensed", "contain", "content", "content-box", "context-menu", "continuous", "copy", "cover", "crop", "cross", "crosshair", "currentcolor", "cursive", "dashed", "decimal", "decimal-leading-zero", "default", "default-button", "destination-atop", "destination-in", "destination-out", "destination-over", "devanagari", "disc", "discard", "document", "dot-dash", "dot-dot-dash", "dotted", "double", "down", "e-resize", "ease", "ease-in", "ease-in-out", "ease-out", "element", "ellipsis", "embed", "end", "ethiopic", "ethiopic-abegede", "ethiopic-abegede-am-et", "ethiopic-abegede-gez", "ethiopic-abegede-ti-er", "ethiopic-abegede-ti-et", "ethiopic-halehame-aa-er", "ethiopic-halehame-aa-et", "ethiopic-halehame-am-et", "ethiopic-halehame-gez", "ethiopic-halehame-om-et", "ethiopic-halehame-sid-et", "ethiopic-halehame-so-et", "ethiopic-halehame-ti-er", "ethiopic-halehame-ti-et", "ethiopic-halehame-tig", "ew-resize", "expanded", "extra-condensed", "extra-expanded", "fantasy", "fast", "fill", "fixed", "flat", "footnotes", "forwards", "from", "geometricPrecision", "georgian", "graytext", "groove", "gujarati", "gurmukhi", "hand", "hangul", "hangul-consonant", "hebrew", "help", "hidden", "hide", "higher", "highlight", "highlighttext", "hiragana", "hiragana-iroha", "horizontal", "hsl", "hsla", "icon", "ignore", "inactiveborder", "inactivecaption", "inactivecaptiontext", "infinite", "infobackground", "infotext", "inherit", "initial", "inline", "inline-axis", "inline-block", "inline-table", "inset", "inside", "intrinsic", "invert", "italic", "justify", "kannada", "katakana", "katakana-iroha", "khmer", "landscape", "lao", "large", "larger", "left", "level", "lighter", "line-through", "linear", "lines", "list-item", "listbox", "listitem", "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", "lower-roman", "lowercase", "ltr", "malayalam", "match", "media-controls-background", "media-current-time-display", "media-fullscreen-button", "media-mute-button", "media-play-button", "media-return-to-realtime-button", "media-rewind-button", "media-seek-back-button", "media-seek-forward-button", "media-slider", "media-sliderthumb", "media-time-remaining-display", "media-volume-slider", "media-volume-slider-container", "media-volume-sliderthumb", "medium", "menu", "menulist", "menulist-button", "menulist-text", "menulist-textfield", "menutext", "message-box", "middle", "min-intrinsic", "mix", "mongolian", "monospace", "move", "multiple", "myanmar", "n-resize", "narrower", "navy", "ne-resize", "nesw-resize", "no-close-quote", "no-drop", "no-open-quote", "no-repeat", "none", "normal", "not-allowed", "nowrap", "ns-resize", "nw-resize", "nwse-resize", "oblique", "octal", "open-quote", "optimizeLegibility", "optimizeSpeed", "oriya", "oromo", "outset", "outside", "overlay", "overline", "padding", "padding-box", "painted", "paused", "persian", "plus-darker", "plus-lighter", "pointer", "portrait", "pre", "pre-line", "pre-wrap", "preserve-3d", "progress", "push-button", "radio", "read-only", "read-write", "read-write-plaintext-only", "relative", "repeat", "repeat-x", "repeat-y", "reset", "reverse", "rgb", "rgba", "ridge", "right", "round", "row-resize", "rtl", "run-in", "running", "s-resize", "sans-serif", "scroll", "scrollbar", "se-resize", "searchfield", "searchfield-cancel-button", "searchfield-decoration", "searchfield-results-button", "searchfield-results-decoration", "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama", "single", "skip-white-space", "slide", "slider-horizontal", "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", "small", "small-caps", "small-caption", "smaller", "solid", "somali", "source-atop", "source-in", "source-out", "source-over", "space", "square", "square-button", "start", "static", "status-bar", "stretch", "stroke", "sub", "subpixel-antialiased", "super", "sw-resize", "table", "table-caption", "table-cell", "table-column", "table-column-group", "table-footer-group", "table-header-group", "table-row", "table-row-group", "telugu", "text", "text-bottom", "text-top", "textarea", "textfield", "thai", "thick", "thin", "threeddarkshadow", "threedface", "threedhighlight", "threedlightshadow", "threedshadow", "tibetan", "tigre", "tigrinya-er", "tigrinya-er-abegede", "tigrinya-et", "tigrinya-et-abegede", "to", "top", "transparent", "ultra-condensed", "ultra-expanded", "underline", "up", "upper-alpha", "upper-armenian", "upper-greek", "upper-hexadecimal", "upper-latin", "upper-norwegian", "upper-roman", "uppercase", "urdu", "url", "vertical", "vertical-text", "visible", "visibleFill", "visiblePainted", "visibleStroke", "visual", "w-resize", "wait", "wave", "white", "wider", "window", "windowframe", "windowtext", "x-large", "x-small", "xor", "xx-large", "xx-small", "yellow" ]); function keySet(array) { var keys = {}; for (var i = 0; i < array.length; ++i) keys[array[i]] = true; return keys; } function ret(style, tp) {type = tp; return style;} function tokenBase(stream, state) { var ch = stream.next(); if (ch == "@") {stream.eatWhile(/[\w\\\-]/); return ret("def", stream.current());} else if (ch == "/" && stream.eat("*")) { state.tokenize = tokenCComment; return tokenCComment(stream, state); } else if (ch == "<" && stream.eat("!")) { state.tokenize = tokenSGMLComment; return tokenSGMLComment(stream, state); } else if (ch == "=") ret(null, "compare"); else if ((ch == "~" || ch == "|") && stream.eat("=")) return ret(null, "compare"); else if (ch == "\"" || ch == "'") { state.tokenize = tokenString(ch); return state.tokenize(stream, state); } else if (ch == "#") { stream.eatWhile(/[\w\\\-]/); return ret("atom", "hash"); } else if (ch == "!") { stream.match(/^\s*\w*/); return ret("keyword", "important"); } else if (/\d/.test(ch)) { stream.eatWhile(/[\w.%]/); return ret("number", "unit"); } else if (ch === "-") { if (/\d/.test(stream.peek())) { stream.eatWhile(/[\w.%]/); return ret("number", "unit"); } else if (stream.match(/^[^-]+-/)) { return ret("meta", type); } } else if (/[,+>*\/]/.test(ch)) { return ret(null, "select-op"); } else if (ch == "." && stream.match(/^-?[_a-z][_a-z0-9-]*/i)) { return ret("qualifier", type); } else if (ch == ":") { return ret("operator", ch); } else if (/[;{}\[\]\(\)]/.test(ch)) { return ret(null, ch); } else { stream.eatWhile(/[\w\\\-]/); return ret("property", "variable"); } } function tokenCComment(stream, state) { var maybeEnd = false, ch; while ((ch = stream.next()) != null) { if (maybeEnd && ch == "/") { state.tokenize = tokenBase; break; } maybeEnd = (ch == "*"); } return ret("comment", "comment"); } function tokenSGMLComment(stream, state) { var dashes = 0, ch; while ((ch = stream.next()) != null) { if (dashes >= 2 && ch == ">") { state.tokenize = tokenBase; break; } dashes = (ch == "-") ? dashes + 1 : 0; } return ret("comment", "comment"); } function tokenString(quote) { return function(stream, state) { var escaped = false, ch; while ((ch = stream.next()) != null) { if (ch == quote && !escaped) break; escaped = !escaped && ch == "\\"; } if (!escaped) state.tokenize = tokenBase; return ret("string", "string"); }; } return { startState: function(base) { return {tokenize: tokenBase, baseIndent: base || 0, stack: []}; }, token: function(stream, state) { // Use these terms when applicable (see http://www.xanthir.com/blog/b4E50) // // rule** or **ruleset: // A selector + braces combo, or an at-rule. // // declaration block: // A sequence of declarations. // // declaration: // A property + colon + value combo. // // property value: // The entire value of a property. // // component value: // A single piece of a property value. Like the 5px in // text-shadow: 0 0 5px blue;. Can also refer to things that are // multiple terms, like the 1-4 terms that make up the background-size // portion of the background shorthand. // // term: // The basic unit of author-facing CSS, like a single number (5), // dimension (5px), string ("foo"), or function. Officially defined // by the CSS 2.1 grammar (look for the 'term' production) // // // simple selector: // A single atomic selector, like a type selector, an attr selector, a // class selector, etc. // // compound selector: // One or more simple selectors without a combinator. div.example is // compound, div > .example is not. // // complex selector: // One or more compound selectors chained with combinators. // // combinator: // The parts of selectors that express relationships. There are four // currently - the space (descendant combinator), the greater-than // bracket (child combinator), the plus sign (next sibling combinator), // and the tilda (following sibling combinator). // // sequence of selectors: // One or more of the named type of selector chained with commas. if (stream.eatSpace()) return null; var style = state.tokenize(stream, state); // Changing style returned based on context var context = state.stack[state.stack.length-1]; if (style == "property") { if (context == "propertyValue"){ if (valueKeywords[stream.current()]) { style = "string-2"; } else if (colorKeywords[stream.current()]) { style = "keyword"; } else { style = "variable-2"; } } else if (context == "rule") { if (!propertyKeywords[stream.current()]) { style += " error"; } } else if (!context || context == "@media{") { style = "tag"; } else if (context == "@media") { if (atMediaTypes[stream.current()]) { style = "attribute"; // Known attribute } else if (/^(only|not)$/i.test(stream.current())) { style = "keyword"; } else if (stream.current().toLowerCase() == "and") { style = "error"; // "and" is only allowed in @mediaType } else if (atMediaFeatures[stream.current()]) { style = "error"; // Known property, should be in @mediaType( } else { // Unknown, expecting keyword or attribute, assuming attribute style = "attribute error"; } } else if (context == "@mediaType") { if (atMediaTypes[stream.current()]) { style = "attribute"; } else if (stream.current().toLowerCase() == "and") { style = "operator"; } else if (/^(only|not)$/i.test(stream.current())) { style = "error"; // Only allowed in @media } else if (atMediaFeatures[stream.current()]) { style = "error"; // Known property, should be in parentheses } else { // Unknown attribute or property, but expecting property (preceded // by "and"). Should be in parentheses style = "error"; } } else if (context == "@mediaType(") { if (propertyKeywords[stream.current()]) { // do nothing, remains "property" } else if (atMediaTypes[stream.current()]) { style = "error"; // Known property, should be in parentheses } else if (stream.current().toLowerCase() == "and") { style = "operator"; } else if (/^(only|not)$/i.test(stream.current())) { style = "error"; // Only allowed in @media } else { style += " error"; } } else { style = "error"; } } else if (style == "atom") { if(!context || context == "@media{") { style = "builtin"; } else if (context == "propertyValue") { if (!/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(stream.current())) { style += " error"; } } else { style = "error"; } } else if (context == "@media" && type == "{") { style = "error"; } // Push/pop context stack if (type == "{") { if (context == "@media" || context == "@mediaType") { state.stack.pop(); state.stack[state.stack.length-1] = "@media{"; } else state.stack.push("rule"); } else if (type == "}") { state.stack.pop(); if (context == "propertyValue") state.stack.pop(); } else if (type == "@media") state.stack.push("@media"); else if (context == "@media" && /\b(keyword|attribute)\b/.test(style)) state.stack.push("@mediaType"); else if (context == "@mediaType" && stream.current() == ",") state.stack.pop(); else if (context == "@mediaType" && type == "(") state.stack.push("@mediaType("); else if (context == "@mediaType(" && type == ")") state.stack.pop(); else if (context == "rule" && type == ":") state.stack.push("propertyValue"); else if (context == "propertyValue" && type == ";") state.stack.pop(); return style; }, indent: function(state, textAfter) { var n = state.stack.length; if (/^\}/.test(textAfter)) n -= state.stack[state.stack.length-1] == "propertyValue" ? 2 : 1; return state.baseIndent + n * indentUnit; }, electricChars: "}" }; }); CodeMirror.defineMIME("text/css", "css");