You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 line
13 KiB
JavaScript
1 line
13 KiB
JavaScript
6 years ago
|
!function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define("addon/search/searchcursor",["../../lib/codemirror"],e):e(CodeMirror)}(function(e){"use strict";function n(e){var n=e.flags;return null!=n?n:(e.ignoreCase?"i":"")+(e.global?"g":"")+(e.multiline?"m":"")}function t(e,t){for(var o=n(e),r=o,i=0;i<t.length;i++)-1==r.indexOf(t.charAt(i))&&(r+=t.charAt(i));return o==r?e:new RegExp(e.source,r)}function o(e){return/\\s|\\n|\n|\\W|\\D|\[\^/.test(e.source)}function r(e,n,o){n=t(n,"g");for(var r=o.line,i=o.ch,s=e.lastLine();r<=s;r++,i=0){n.lastIndex=i;var a=e.getLine(r),l=n.exec(a);if(l)return{from:g(r,l.index),to:g(r,l.index+l[0].length),match:l}}}function i(e,n,i){if(!o(n))return r(e,n,i);n=t(n,"gm");for(var s,a=1,l=i.line,c=e.lastLine();l<=c;){for(var u=0;u<a&&!(l>c);u++){var f=e.getLine(l++);s=null==s?f:s+"\n"+f}a*=2,n.lastIndex=i.ch;var h=n.exec(s);if(h){var p=s.slice(0,h.index).split("\n"),d=h[0].split("\n"),m=i.line+p.length-1,v=p[p.length-1].length;return{from:g(m,v),to:g(m+d.length-1,1==d.length?v+d[0].length:d[d.length-1].length),match:h}}}}function s(e,n){for(var t,o=0;;){n.lastIndex=o;var r=n.exec(e);if(!r)return t;if(t=r,(o=t.index+(t[0].length||1))==e.length)return t}}function a(e,n,o){n=t(n,"g");for(var r=o.line,i=o.ch,a=e.firstLine();r>=a;r--,i=-1){var l=e.getLine(r);i>-1&&(l=l.slice(0,i));var c=s(l,n);if(c)return{from:g(r,c.index),to:g(r,c.index+c[0].length),match:c}}}function l(e,n,o){n=t(n,"gm");for(var r,i=1,a=o.line,l=e.firstLine();a>=l;){for(var c=0;c<i;c++){var u=e.getLine(a--);r=null==r?u.slice(0,o.ch):u+"\n"+r}i*=2;var f=s(r,n);if(f){var h=r.slice(0,f.index).split("\n"),p=f[0].split("\n"),d=a+h.length,m=h[h.length-1].length;return{from:g(d,m),to:g(d+p.length-1,1==p.length?m+p[0].length:p[p.length-1].length),match:f}}}}function c(e,n,t,o){if(e.length==n.length)return t;for(var r=0,i=t+Math.max(0,e.length-n.length);;){if(r==i)return r;var s=r+i>>1,a=o(e.slice(0,s)).length;if(a==t)return s;a>t?i=s:r=s+1}}function u(e,n,t,o){if(!n.length)return null;var r=o?p:d,i=r(n).split(/\r|\n\r?/);e:for(var s=t.line,a=t.ch,l=e.lastLine()+1-i.length;s<=l;s++,a=0){var u=e.getLine(s).slice(a),f=r(u);if(1==i.length){var h=f.indexOf(i[0]);if(-1==h)continue e;var t=c(u,f,h,r)+a;return{from:g(s,c(u,f,h,r)+a),to:g(s,c(u,f,h+i[0].length,r)+a)}}var m=f.length-i[0].length;if(f.slice(m)==i[0]){for(var v=1;v<i.length-1;v++)if(r(e.getLine(s+v))!=i[v])continue e;var y=e.getLine(s+i.length-1),x=r(y),C=i[i.length-1];if(x.slice(0,C.length)==C)return{from:g(s,c(u,f,m,r)+a),to:g(s+i.length-1,c(y,x,C.length,r))}}}}function f(e,n,t,o){if(!n.length)return null;var r=o?p:d,i=r(n).split(/\r|\n\r?/);e:for(var s=t.line,a=t.ch,l=e.firstLine()-1+i.length;s>=l;s--,a=-1){var u=e.getLine(s);a>-1&&(u=u.slice(0,a));var f=r(u);if(1==i.length){var h=f.lastIndexOf(i[0]);if(-1==h)continue e;return{from:g(s,c(u,f,h,r)),to:g(s,c(u,f,h+i[0].length,r))}}var m=i[i.length-1];if(f.slice(0,m.length)==m){for(var v=1,t=s-i.length+1;v<i.length-1;v++)if(r(e.getLine(t+v))!=i[v])continue e;var y=e.getLine(s+1-i.length),x=r(y);if(x.slice(x.length-i[0].length)==i[0])return{from:g(s+1-i.length,c(y,x,y.length-i[0].length,r)),to:g(s,c(u,f,m.length,r))}}}}function h(e,n,o,s){this.atOccurrence=!1,this.doc=e,o=o?e.clipPos(o):g(0,0),this.pos={from:o,to:o};var c;"object"==typeof s?c=s.caseFold:(c=s,s=null),"string"==typeof n?(null==c&&(c=!1),this.matches=function(t,o){return(t?f:u)(e,n,o,c)}):(n=t(n,"gm"),s&&!1===s.multiline?this.matches=function(t,o){return(t?a:r)(e,n,o)}:this.matches=function(t,o){return(t?l:i)(e,n,o)})}var p,d,g=e.Pos;String.prototype.normalize?(p=function(e){return e.normalize("NFD").toLowerCase()},d=function(e){return e.normalize("NFD")}):(p=function(e){return e.toLowerCase()},d=function(e){return e}),h.prototype={findNext:function(){return this.find(!1)},findPrevious:function(){return this.find(!0)},find:function(n){for(var t=this.matches(n,this.doc.clipPos(n?this.pos.from:this.pos.to));t&&0==e.cmpPos(t.from,t.to);)n?t.from.ch?t.from=g(t.from.line,t.from.ch-1):t=t.from.l
|