(function(a){if(typeof exports=="object"&&typeof module=="object"){a(require("../../lib/codemirror"))}else{if(typeof define=="function"&&define.amd){define(["../../lib/codemirror"],a)}else{a(CodeMirror)}}})(function(a){var b=a.Pos;function c(k,i,l,g){this.atOccurrence=false;this.doc=k;if(g==null&&typeof i=="string"){g=false}l=l?k.clipPos(l):b(0,0);this.pos={from:l,to:l};if(typeof i!="string"){if(!i.global){i=new RegExp(i.source,i.ignoreCase?"ig":"g")}this.matches=function(p,t){if(p){i.lastIndex=0;var m=k.getLine(t.line).slice(0,t.ch),r=0,o,s;for(;;){i.lastIndex=r;var q=i.exec(m);if(!q){break}o=q;s=o.index;r=o.index+(o[0].length||1);if(r==m.length){break}}var n=(o&&o[0].length)||0;if(!n){if(s==0&&m.length==0){o=undefined}else{if(s!=k.getLine(t.line).length){n++}}}}else{i.lastIndex=t.ch;var m=k.getLine(t.line),o=i.exec(m);var n=(o&&o[0].length)||0;var s=o&&o.index;if(s+n!=m.length&&!n){n=1}}if(o&&n){return{from:b(t.line,s),to:b(t.line,s+n),match:o}}}}else{var e=i;if(g){i=i.toLowerCase()}var f=g?function(m){return m.toLowerCase()}:function(m){return m};var j=i.split("\n");if(j.length==1){if(!i.length){this.matches=function(){}}else{this.matches=function(o,q){if(o){var p=k.getLine(q.line).slice(0,q.ch),m=f(p);var n=m.lastIndexOf(i);if(n>-1){n=d(p,m,n);return{from:b(q.line,n),to:b(q.line,n+e.length)}}}else{var p=k.getLine(q.line).slice(q.ch),m=f(p);var n=m.indexOf(i);if(n>-1){n=d(p,m,n)+q.ch;return{from:b(q.line,n),to:b(q.line,n+e.length)}}}}}}else{var h=e.split("\n");this.matches=function(n,p){var t=j.length-1;if(n){if(p.line-(j.length-1)<k.firstLine()){return}if(f(k.getLine(p.line).slice(0,h[t].length))!=j[j.length-1]){return}var s=b(p.line,h[t].length);for(var o=p.line-1,m=t-1;m>=1;--m,--o){if(j[m]!=f(k.getLine(o))){return}}var u=k.getLine(o),q=u.length-h[0].length;if(f(u.slice(q))!=j[0]){return}return{from:b(o,q),to:s}}else{if(p.line+(j.length-1)>k.lastLine()){return}var u=k.getLine(p.line),q=u.length-h[0].length;if(f(u.slice(q))!=j[0]){return}var r=b(p.line,q);for(var o=p.line+1,m=1;m<t;++m,++o){if(j[m]!=f(k.getLine(o))){return}}if(f(k.getLine(o).slice(0,h[t].length))!=j[t]){return}return{from:r,to:b(o,h[t].length)}}}}}}c.prototype={findNext:function(){return this.find(false)},findPrevious:function(){return this.find(true)},find:function(f){var e=this,i=this.doc.clipPos(f?this.pos.from:this.pos.to);function g(j){var k=b(j,0);e.pos={from:k,to:k};e.atOccurrence=false;return false}for(;;){if(this.pos=this.matches(f,i)){this.atOccurrence=true;return this.pos.match||true}if(f){if(!i.line){return g(0)}i=b(i.line-1,this.doc.getLine(i.line-1).length)}else{var h=this.doc.lineCount();if(i.line==h-1){return g(h)}i=b(i.line+1,0)}}},from:function(){if(this.atOccurrence){return this.pos.from}},to:function(){if(this.atOccurrence){return this.pos.to}},replace:function(g,f){if(!this.atOccurrence){return}var e=a.splitLines(g);this.doc.replaceRange(e,this.pos.from,this.pos.to,f);this.pos.to=b(this.pos.from.line+e.length-1,e[e.length-1].length+(e.length==1?this.pos.from.ch:0))}};function d(i,g,h){if(i.length==g.length){return h}for(var f=Math.min(h,i.length);;){var e=i.slice(0,f).toLowerCase().length;if(e<h){++f}else{if(e>h){--f}else{return f}}}}a.defineExtension("getSearchCursor",function(f,g,e){return new c(this.doc,f,g,e)});a.defineDocExtension("getSearchCursor",function(f,g,e){return new c(this,f,g,e)});a.defineExtension("selectMatches",function(g,f){var e=[];var h=this.getSearchCursor(g,this.getCursor("from"),f);while(h.findNext()){if(a.cmpPos(h.to(),this.getCursor("to"))>0){break}e.push({anchor:h.from(),head:h.to()})}if(e.length){this.setSelections(e,0)}})});