You can not 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
22 KiB

4 years ago
function diff_match_patch(){this.Diff_Timeout=1;this.Diff_EditCost=4;this.Match_Threshold=0.5;this.Match_Distance=1000;this.Patch_DeleteThreshold=0.5;this.Patch_Margin=4;this.Match_MaxBits=32}var DIFF_DELETE=-1;var DIFF_INSERT=1;var DIFF_EQUAL=0;diff_match_patch.Diff;diff_match_patch.prototype.diff_main=function(b,a,d,f){if(typeof f=="undefined"){if(this.Diff_Timeout<=0){f=Number.MAX_VALUE}else{f=(new Date).getTime()+this.Diff_Timeout*1000}}var i=f;if(b==null||a==null){throw new Error("Null input. (diff_main)")}if(b==a){if(b){return[[DIFF_EQUAL,b]]}return[]}if(typeof d=="undefined"){d=true}var j=d;var e=this.diff_commonPrefix(b,a);var h=b.substring(0,e);b=b.substring(e);a=a.substring(e);e=this.diff_commonSuffix(b,a);var c=b.substring(b.length-e);b=b.substring(0,b.length-e);a=a.substring(0,a.length-e);var g=this.diff_compute_(b,a,j,i);if(h){g.unshift([DIFF_EQUAL,h])}if(c){g.push([DIFF_EQUAL,c])}this.diff_cleanupMerge(g);return g};diff_match_patch.prototype.diff_compute_=function(c,b,q,p){var j;if(!c){return[[DIFF_INSERT,b]]}if(!b){return[[DIFF_DELETE,c]]}var m=c.length>b.length?c:b;var d=c.length>b.length?b:c;var f=m.indexOf(d);if(f!=-1){j=[[DIFF_INSERT,m.substring(0,f)],[DIFF_EQUAL,d],[DIFF_INSERT,m.substring(f+d.length)]];if(c.length>b.length){j[0][0]=j[2][0]=DIFF_DELETE}return j}if(d.length==1){return[[DIFF_DELETE,c],[DIFF_INSERT,b]]}var a=this.diff_halfMatch_(c,b);if(a){var l=a[0];var h=a[1];var o=a[2];var n=a[3];var e=a[4];var k=this.diff_main(l,o,q,p);var g=this.diff_main(h,n,q,p);return k.concat([[DIFF_EQUAL,e]],g)}if(q&&c.length>100&&b.length>100){return this.diff_lineMode_(c,b,p)}return this.diff_bisect_(c,b,p)};diff_match_patch.prototype.diff_lineMode_=function(d,c,n){var k=this.diff_linesToChars_(d,c);d=k.chars1;c=k.chars2;var e=k.lineArray;var g=this.diff_main(d,c,false,n);this.diff_charsToLines_(g,e);this.diff_cleanupSemantic(g);g.push([DIFF_EQUAL,""]);var b=0;var m=0;var l=0;var i="";var h="";while(b<g.length){switch(g[b][0]){case DIFF_INSERT:l++;h+=g[b][1];break;case DIFF_DELETE:m++;i+=g[b][1];break;case DIFF_EQUAL:if(m>=1&&l>=1){g.splice(b-m-l,m+l);b=b-m-l;var k=this.diff_main(i,h,false,n);for(var f=k.length-1;f>=0;f--){g.splice(b,0,k[f])}b=b+k.length}l=0;m=0;i="";h="";break}b++}g.pop();return g};diff_match_patch.prototype.diff_bisect_=function(n,l,A){var v=n.length;var g=l.length;var h=Math.ceil((v+g)/2);var r=h;var o=2*h;var e=new Array(o);var b=new Array(o);for(var m=0;m<o;m++){e[m]=-1;b[m]=-1}e[r+1]=0;b[r+1]=0;var B=v-g;var i=(B%2!=0);var s=0;var p=0;var u=0;var t=0;for(var z=0;z<h;z++){if((new Date()).getTime()>A){break}for(var k=-z+s;k<=z-p;k+=2){var q=r+k;var y;if(k==-z||(k!=z&&e[q-1]<e[q+1])){y=e[q+1]}else{y=e[q-1]+1}var f=y-k;while(y<v&&f<g&&n.charAt(y)==l.charAt(f)){y++;f++}e[q]=y;if(y>v){p+=2}else{if(f>g){s+=2}else{if(i){var a=r+B-k;if(a>=0&&a<o&&b[a]!=-1){var w=v-b[a];if(y>=w){return this.diff_bisectSplit_(n,l,y,f,A)}}}}}}for(var j=-z+u;j<=z-t;j+=2){var a=r+j;var w;if(j==-z||(j!=z&&b[a-1]<b[a+1])){w=b[a+1]}else{w=b[a-1]+1}var c=w-j;while(w<v&&c<g&&n.charAt(v-w-1)==l.charAt(g-c-1)){w++;c++}b[a]=w;if(w>v){t+=2}else{if(c>g){u+=2}else{if(!i){var q=r+B-j;if(q>=0&&q<o&&e[q]!=-1){var y=e[q];var f=r+y-q;w=v-w;if(y>=w){return this.diff_bisectSplit_(n,l,y,f,A)}}}}}}}return[[DIFF_DELETE,n],[DIFF_INSERT,l]]};diff_match_patch.prototype.diff_bisectSplit_=function(d,c,i,h,k){var f=d.substring(0,i);var b=c.substring(0,h);var e=d.substring(i);var a=c.substring(h);var g=this.diff_main(f,b,false,k);var j=this.diff_main(e,a,false,k);return g.concat(j)};diff_match_patch.prototype.diff_linesToChars_=function(g,e){var d=[];var a={};d[0]="";function f(m){var k="";var i=0;var l=-1;var j=d.length;while(l<m.length-1){l=m.indexOf("\n",i);if(l==-1){l=m.length-1}var h=m.substring(i,l+1);i=l+1;if(a.hasOwnProperty?a.hasOwnProperty(h):(a[h]!==undefined)){k+=String.fromCharCode(a[h])}else{k+=String.fromCharCode(j);a[h]=j;d[j++]=h}}return k}var c=f(g);var b=f(e);return{chars1:c,chars2:b,lineArray:d}};diff_match_patch.prototype.diff_charsToLines_=function(e,b){for(var a=0;a<e.length;a++){var c=e[a][1];var d=[];for(var f=0;f<c.le