2022-08-05 11:00:38 +08:00
// https://github.com/google/diff-match-patch
2022-08-06 04:25:16 +08:00
// https://github.com/google/diff-match-patch/blob/master/LICENSE
2022-08-05 11:00:38 +08:00
var diff _match _patch = function ( ) { this . Diff _Timeout = 1 ; this . Diff _EditCost = 4 ; this . Match _Threshold = . 5 ; this . Match _Distance = 1E3 ; this . Patch _DeleteThreshold = . 5 ; this . Patch _Margin = 4 ; this . Match _MaxBits = 32 } , DIFF _DELETE = - 1 , DIFF _INSERT = 1 , DIFF _EQUAL = 0 ; diff _match _patch . Diff = function ( a , b ) { this [ 0 ] = a ; this [ 1 ] = b } ; diff _match _patch . Diff . prototype . length = 2 ; diff _match _patch . Diff . prototype . toString = function ( ) { return this [ 0 ] + "," + this [ 1 ] } ;
diff _match _patch . prototype . diff _main = function ( a , b , c , d ) { "undefined" == typeof d && ( d = 0 >= this . Diff _Timeout ? Number . MAX _VALUE : ( new Date ) . getTime ( ) + 1E3 * this . Diff _Timeout ) ; if ( null == a || null == b ) throw Error ( "Null input. (diff_main)" ) ; if ( a == b ) return a ? [ new diff _match _patch . Diff ( DIFF _EQUAL , a ) ] : [ ] ; "undefined" == typeof c && ( c = ! 0 ) ; var e = c , f = this . diff _commonPrefix ( a , b ) ; c = a . substring ( 0 , f ) ; a = a . substring ( f ) ; b = b . substring ( f ) ; f = this . diff _commonSuffix ( a , b ) ; var g = a . substring ( a . length - f ) ; a = a . substring ( 0 , a . length - f ) ; b = b . substring ( 0 ,
b . length - f ) ; a = this . diff _compute _ ( a , b , e , d ) ; c && a . unshift ( new diff _match _patch . Diff ( DIFF _EQUAL , c ) ) ; g && a . push ( new diff _match _patch . Diff ( DIFF _EQUAL , g ) ) ; this . diff _cleanupMerge ( a ) ; return a } ;
diff _match _patch . prototype . diff _compute _ = function ( a , b , c , d ) { if ( ! a ) return [ new diff _match _patch . Diff ( DIFF _INSERT , b ) ] ; if ( ! b ) return [ new diff _match _patch . Diff ( DIFF _DELETE , a ) ] ; var e = a . length > b . length ? a : b , f = a . length > b . length ? b : a , g = e . indexOf ( f ) ; return - 1 != g ? ( c = [ new diff _match _patch . Diff ( DIFF _INSERT , e . substring ( 0 , g ) ) , new diff _match _patch . Diff ( DIFF _EQUAL , f ) , new diff _match _patch . Diff ( DIFF _INSERT , e . substring ( g + f . length ) ) ] , a . length > b . length && ( c [ 0 ] [ 0 ] = c [ 2 ] [ 0 ] = DIFF _DELETE ) , c ) : 1 == f . length ? [ new diff _match _patch . Diff ( DIFF _DELETE ,
a ) , new diff _match _patch . Diff ( DIFF _INSERT , b ) ] : ( e = this . diff _halfMatch _ ( a , b ) ) ? ( b = e [ 1 ] , f = e [ 3 ] , a = e [ 4 ] , e = this . diff _main ( e [ 0 ] , e [ 2 ] , c , d ) , c = this . diff _main ( b , f , c , d ) , e . concat ( [ new diff _match _patch . Diff ( DIFF _EQUAL , a ) ] , c ) ) : c && 100 < a . length && 100 < b . length ? this . diff _lineMode _ ( a , b , d ) : this . diff _bisect _ ( a , b , d ) } ;
diff _match _patch . prototype . diff _lineMode _ = function ( a , b , c ) { var d = this . diff _linesToChars _ ( a , b ) ; a = d . chars1 ; b = d . chars2 ; d = d . lineArray ; a = this . diff _main ( a , b , ! 1 , c ) ; this . diff _charsToLines _ ( a , d ) ; this . diff _cleanupSemantic ( a ) ; a . push ( new diff _match _patch . Diff ( DIFF _EQUAL , "" ) ) ; for ( var e = d = b = 0 , f = "" , g = "" ; b < a . length ; ) { switch ( a [ b ] [ 0 ] ) { case DIFF _INSERT : e ++ ; g += a [ b ] [ 1 ] ; break ; case DIFF _DELETE : d ++ ; f += a [ b ] [ 1 ] ; break ; case DIFF _EQUAL : if ( 1 <= d && 1 <= e ) { a . splice ( b - d - e , d + e ) ; b = b - d - e ; d = this . diff _main ( f , g , ! 1 , c ) ; for ( e = d . length - 1 ; 0 <= e ; e -- ) a . splice ( b ,
0 , d [ e ] ) ; b += d . length } d = e = 0 ; g = f = "" } b ++ } a . pop ( ) ; return a } ;
diff _match _patch . prototype . diff _bisect _ = function ( a , b , c ) { for ( var d = a . length , e = b . length , f = Math . ceil ( ( d + e ) / 2 ) , g = 2 * f , h = Array ( g ) , l = Array ( g ) , k = 0 ; k < g ; k ++ ) h [ k ] = - 1 , l [ k ] = - 1 ; h [ f + 1 ] = 0 ; l [ f + 1 ] = 0 ; k = d - e ; for ( var m = 0 != k % 2 , p = 0 , x = 0 , w = 0 , q = 0 , t = 0 ; t < f && ! ( ( new Date ) . getTime ( ) > c ) ; t ++ ) { for ( var v = - t + p ; v <= t - x ; v += 2 ) { var n = f + v ; var r = v == - t || v != t && h [ n - 1 ] < h [ n + 1 ] ? h [ n + 1 ] : h [ n - 1 ] + 1 ; for ( var y = r - v ; r < d && y < e && a . charAt ( r ) == b . charAt ( y ) ; ) r ++ , y ++ ; h [ n ] = r ; if ( r > d ) x += 2 ; else if ( y > e ) p += 2 ; else if ( m && ( n = f + k - v , 0 <= n && n < g && - 1 != l [ n ] ) ) { var u = d - l [ n ] ; if ( r >=
u ) return this . diff _bisectSplit _ ( a , b , r , y , c ) } } for ( v = - t + w ; v <= t - q ; v += 2 ) { n = f + v ; u = v == - t || v != t && l [ n - 1 ] < l [ n + 1 ] ? l [ n + 1 ] : l [ n - 1 ] + 1 ; for ( r = u - v ; u < d && r < e && a . charAt ( d - u - 1 ) == b . charAt ( e - r - 1 ) ; ) u ++ , r ++ ; l [ n ] = u ; if ( u > d ) q += 2 ; else if ( r > e ) w += 2 ; else if ( ! m && ( n = f + k - v , 0 <= n && n < g && - 1 != h [ n ] && ( r = h [ n ] , y = f + r - n , u = d - u , r >= u ) ) ) return this . diff _bisectSplit _ ( a , b , r , y , c ) } } return [ new diff _match _patch . Diff ( DIFF _DELETE , a ) , new diff _match _patch . Diff ( DIFF _INSERT , b ) ] } ;
diff _match _patch . prototype . diff _bisectSplit _ = function ( a , b , c , d , e ) { var f = a . substring ( 0 , c ) , g = b . substring ( 0 , d ) ; a = a . substring ( c ) ; b = b . substring ( d ) ; f = this . diff _main ( f , g , ! 1 , e ) ; e = this . diff _main ( a , b , ! 1 , e ) ; return f . concat ( e ) } ;
diff _match _patch . prototype . diff _linesToChars _ = function ( a , b ) { function c ( a ) { for ( var b = "" , c = 0 , g = - 1 , h = d . length ; g < a . length - 1 ; ) { g = a . indexOf ( "\n" , c ) ; - 1 == g && ( g = a . length - 1 ) ; var l = a . substring ( c , g + 1 ) ; ( e . hasOwnProperty ? e . hasOwnProperty ( l ) : void 0 !== e [ l ] ) ? b += String . fromCharCode ( e [ l ] ) : ( h == f && ( l = a . substring ( c ) , g = a . length ) , b += String . fromCharCode ( h ) , e [ l ] = h , d [ h ++ ] = l ) ; c = g + 1 } return b } var d = [ ] , e = { } ; d [ 0 ] = "" ; var f = 4E4 , g = c ( a ) ; f = 65535 ; var h = c ( b ) ; return { chars1 : g , chars2 : h , lineArray : d } } ;
diff _match _patch . prototype . diff _charsToLines _ = function ( a , b ) { for ( var c = 0 ; c < a . length ; c ++ ) { for ( var d = a [ c ] [ 1 ] , e = [ ] , f = 0 ; f < d . length ; f ++ ) e [ f ] = b [ d . charCodeAt ( f ) ] ; a [ c ] [ 1 ] = e . join ( "" ) } } ; diff _match _patch . prototype . diff _commonPrefix = function ( a , b ) { if ( ! a || ! b || a . charAt ( 0 ) != b . charAt ( 0 ) ) return 0 ; for ( var c = 0 , d = Math . min ( a . length , b . length ) , e = d , f = 0 ; c < e ; ) a . substring ( f , e ) == b . substring ( f , e ) ? f = c = e : d = e , e = Math . floor ( ( d - c ) / 2 + c ) ; return e } ;
diff _match _patch . prototype . diff _commonSuffix = function ( a , b ) { if ( ! a || ! b || a . charAt ( a . length - 1 ) != b . charAt ( b . length - 1 ) ) return 0 ; for ( var c = 0 , d = Math . min ( a . length , b . length ) , e = d , f = 0 ; c < e ; ) a . substring ( a . length - e , a . length - f ) == b . substring ( b . length - e , b . length - f ) ? f = c = e : d = e , e = Math . floor ( ( d - c ) / 2 + c ) ; return e } ;
diff _match _patch . prototype . diff _commonOverlap _ = function ( a , b ) { var c = a . length , d = b . length ; if ( 0 == c || 0 == d ) return 0 ; c > d ? a = a . substring ( c - d ) : c < d && ( b = b . substring ( 0 , c ) ) ; c = Math . min ( c , d ) ; if ( a == b ) return c ; d = 0 ; for ( var e = 1 ; ; ) { var f = a . substring ( c - e ) ; f = b . indexOf ( f ) ; if ( - 1 == f ) return d ; e += f ; if ( 0 == f || a . substring ( c - e ) == b . substring ( 0 , e ) ) d = e , e ++ } } ;
diff _match _patch . prototype . diff _halfMatch _ = function ( a , b ) { function c ( a , b , c ) { for ( var d = a . substring ( c , c + Math . floor ( a . length / 4 ) ) , e = - 1 , g = "" , h , k , l , m ; - 1 != ( e = b . indexOf ( d , e + 1 ) ) ; ) { var p = f . diff _commonPrefix ( a . substring ( c ) , b . substring ( e ) ) , u = f . diff _commonSuffix ( a . substring ( 0 , c ) , b . substring ( 0 , e ) ) ; g . length < u + p && ( g = b . substring ( e - u , e ) + b . substring ( e , e + p ) , h = a . substring ( 0 , c - u ) , k = a . substring ( c + p ) , l = b . substring ( 0 , e - u ) , m = b . substring ( e + p ) ) } return 2 * g . length >= a . length ? [ h , k , l , m , g ] : null } if ( 0 >= this . Diff _Timeout ) return null ;
var d = a . length > b . length ? a : b , e = a . length > b . length ? b : a ; if ( 4 > d . length || 2 * e . length < d . length ) return null ; var f = this , g = c ( d , e , Math . ceil ( d . length / 4 ) ) ; d = c ( d , e , Math . ceil ( d . length / 2 ) ) ; if ( g || d ) g = d ? g ? g [ 4 ] . length > d [ 4 ] . length ? g : d : d : g ; else return null ; if ( a . length > b . length ) { d = g [ 0 ] ; e = g [ 1 ] ; var h = g [ 2 ] ; var l = g [ 3 ] } else h = g [ 0 ] , l = g [ 1 ] , d = g [ 2 ] , e = g [ 3 ] ; return [ d , e , h , l , g [ 4 ] ] } ;
diff _match _patch . prototype . diff _cleanupSemantic = function ( a ) { for ( var b = ! 1 , c = [ ] , d = 0 , e = null , f = 0 , g = 0 , h = 0 , l = 0 , k = 0 ; f < a . length ; ) a [ f ] [ 0 ] == DIFF _EQUAL ? ( c [ d ++ ] = f , g = l , h = k , k = l = 0 , e = a [ f ] [ 1 ] ) : ( a [ f ] [ 0 ] == DIFF _INSERT ? l += a [ f ] [ 1 ] . length : k += a [ f ] [ 1 ] . length , e && e . length <= Math . max ( g , h ) && e . length <= Math . max ( l , k ) && ( a . splice ( c [ d - 1 ] , 0 , new diff _match _patch . Diff ( DIFF _DELETE , e ) ) , a [ c [ d - 1 ] + 1 ] [ 0 ] = DIFF _INSERT , d -- , d -- , f = 0 < d ? c [ d - 1 ] : - 1 , k = l = h = g = 0 , e = null , b = ! 0 ) ) , f ++ ; b && this . diff _cleanupMerge ( a ) ; this . diff _cleanupSemanticLossless ( a ) ; for ( f = 1 ; f <
a . length ; ) { if ( a [ f - 1 ] [ 0 ] == DIFF _DELETE && a [ f ] [ 0 ] == DIFF _INSERT ) { b = a [ f - 1 ] [ 1 ] ; c = a [ f ] [ 1 ] ; d = this . diff _commonOverlap _ ( b , c ) ; e = this . diff _commonOverlap _ ( c , b ) ; if ( d >= e ) { if ( d >= b . length / 2 || d >= c . length / 2 ) a . splice ( f , 0 , new diff _match _patch . Diff ( DIFF _EQUAL , c . substring ( 0 , d ) ) ) , a [ f - 1 ] [ 1 ] = b . substring ( 0 , b . length - d ) , a [ f + 1 ] [ 1 ] = c . substring ( d ) , f ++ } else if ( e >= b . length / 2 || e >= c . length / 2 ) a . splice ( f , 0 , new diff _match _patch . Diff ( DIFF _EQUAL , b . substring ( 0 , e ) ) ) , a [ f - 1 ] [ 0 ] = DIFF _INSERT , a [ f - 1 ] [ 1 ] = c . substring ( 0 , c . length - e ) , a [ f + 1 ] [ 0 ] = DIFF _DELETE ,
a [ f + 1 ] [ 1 ] = b . substring ( e ) , f ++ ; f ++ } f ++ } } ;
diff _match _patch . prototype . diff _cleanupSemanticLossless = function ( a ) { function b ( a , b ) { if ( ! a || ! b ) return 6 ; var c = a . charAt ( a . length - 1 ) , d = b . charAt ( 0 ) , e = c . match ( diff _match _patch . nonAlphaNumericRegex _ ) , f = d . match ( diff _match _patch . nonAlphaNumericRegex _ ) , g = e && c . match ( diff _match _patch . whitespaceRegex _ ) , h = f && d . match ( diff _match _patch . whitespaceRegex _ ) ; c = g && c . match ( diff _match _patch . linebreakRegex _ ) ; d = h && d . match ( diff _match _patch . linebreakRegex _ ) ; var k = c && a . match ( diff _match _patch . blanklineEndRegex _ ) , l = d && b . match ( diff _match _patch . blanklineStartRegex _ ) ;
return k || l ? 5 : c || d ? 4 : e && ! g && h ? 3 : g || h ? 2 : e || f ? 1 : 0 } for ( var c = 1 ; c < a . length - 1 ; ) { if ( a [ c - 1 ] [ 0 ] == DIFF _EQUAL && a [ c + 1 ] [ 0 ] == DIFF _EQUAL ) { var d = a [ c - 1 ] [ 1 ] , e = a [ c ] [ 1 ] , f = a [ c + 1 ] [ 1 ] , g = this . diff _commonSuffix ( d , e ) ; if ( g ) { var h = e . substring ( e . length - g ) ; d = d . substring ( 0 , d . length - g ) ; e = h + e . substring ( 0 , e . length - g ) ; f = h + f } g = d ; h = e ; for ( var l = f , k = b ( d , e ) + b ( e , f ) ; e . charAt ( 0 ) === f . charAt ( 0 ) ; ) { d += e . charAt ( 0 ) ; e = e . substring ( 1 ) + f . charAt ( 0 ) ; f = f . substring ( 1 ) ; var m = b ( d , e ) + b ( e , f ) ; m >= k && ( k = m , g = d , h = e , l = f ) } a [ c - 1 ] [ 1 ] != g && ( g ? a [ c - 1 ] [ 1 ] = g : ( a . splice ( c -
1 , 1 ) , c -- ) , a [ c ] [ 1 ] = h , l ? a [ c + 1 ] [ 1 ] = l : ( a . splice ( c + 1 , 1 ) , c -- ) ) } c ++ } } ; diff _match _patch . nonAlphaNumericRegex _ = /[^a-zA-Z0-9]/ ; diff _match _patch . whitespaceRegex _ = /\s/ ; diff _match _patch . linebreakRegex _ = /[\r\n]/ ; diff _match _patch . blanklineEndRegex _ = /\n\r?\n$/ ; diff _match _patch . blanklineStartRegex _ = /^\r?\n\r?\n/ ;
diff _match _patch . prototype . diff _cleanupEfficiency = function ( a ) { for ( var b = ! 1 , c = [ ] , d = 0 , e = null , f = 0 , g = ! 1 , h = ! 1 , l = ! 1 , k = ! 1 ; f < a . length ; ) a [ f ] [ 0 ] == DIFF _EQUAL ? ( a [ f ] [ 1 ] . length < this . Diff _EditCost && ( l || k ) ? ( c [ d ++ ] = f , g = l , h = k , e = a [ f ] [ 1 ] ) : ( d = 0 , e = null ) , l = k = ! 1 ) : ( a [ f ] [ 0 ] == DIFF _DELETE ? k = ! 0 : l = ! 0 , e && ( g && h && l && k || e . length < this . Diff _EditCost / 2 && 3 == g + h + l + k ) && ( a . splice ( c [ d - 1 ] , 0 , new diff _match _patch . Diff ( DIFF _DELETE , e ) ) , a [ c [ d - 1 ] + 1 ] [ 0 ] = DIFF _INSERT , d -- , e = null , g && h ? ( l = k = ! 0 , d = 0 ) : ( d -- , f = 0 < d ? c [ d - 1 ] : - 1 , l = k = ! 1 ) , b = ! 0 ) ) , f ++ ; b && this . diff _cleanupMerge ( a ) } ;
diff _match _patch . prototype . diff _cleanupMerge = function ( a ) { a . push ( new diff _match _patch . Diff ( DIFF _EQUAL , "" ) ) ; for ( var b = 0 , c = 0 , d = 0 , e = "" , f = "" , g ; b < a . length ; ) switch ( a [ b ] [ 0 ] ) { case DIFF _INSERT : d ++ ; f += a [ b ] [ 1 ] ; b ++ ; break ; case DIFF _DELETE : c ++ ; e += a [ b ] [ 1 ] ; b ++ ; break ; case DIFF _EQUAL : 1 < c + d ? ( 0 !== c && 0 !== d && ( g = this . diff _commonPrefix ( f , e ) , 0 !== g && ( 0 < b - c - d && a [ b - c - d - 1 ] [ 0 ] == DIFF _EQUAL ? a [ b - c - d - 1 ] [ 1 ] += f . substring ( 0 , g ) : ( a . splice ( 0 , 0 , new diff _match _patch . Diff ( DIFF _EQUAL , f . substring ( 0 , g ) ) ) , b ++ ) , f = f . substring ( g ) , e = e . substring ( g ) ) ,
g = this . diff _commonSuffix ( f , e ) , 0 !== g && ( a [ b ] [ 1 ] = f . substring ( f . length - g ) + a [ b ] [ 1 ] , f = f . substring ( 0 , f . length - g ) , e = e . substring ( 0 , e . length - g ) ) ) , b -= c + d , a . splice ( b , c + d ) , e . length && ( a . splice ( b , 0 , new diff _match _patch . Diff ( DIFF _DELETE , e ) ) , b ++ ) , f . length && ( a . splice ( b , 0 , new diff _match _patch . Diff ( DIFF _INSERT , f ) ) , b ++ ) , b ++ ) : 0 !== b && a [ b - 1 ] [ 0 ] == DIFF _EQUAL ? ( a [ b - 1 ] [ 1 ] += a [ b ] [ 1 ] , a . splice ( b , 1 ) ) : b ++ , c = d = 0 , f = e = "" } "" === a [ a . length - 1 ] [ 1 ] && a . pop ( ) ; c = ! 1 ; for ( b = 1 ; b < a . length - 1 ; ) a [ b - 1 ] [ 0 ] == DIFF _EQUAL && a [ b + 1 ] [ 0 ] == DIFF _EQUAL && ( a [ b ] [ 1 ] . substring ( a [ b ] [ 1 ] . length -
a [ b - 1 ] [ 1 ] . length ) == a [ b - 1 ] [ 1 ] ? ( a [ b ] [ 1 ] = a [ b - 1 ] [ 1 ] + a [ b ] [ 1 ] . substring ( 0 , a [ b ] [ 1 ] . length - a [ b - 1 ] [ 1 ] . length ) , a [ b + 1 ] [ 1 ] = a [ b - 1 ] [ 1 ] + a [ b + 1 ] [ 1 ] , a . splice ( b - 1 , 1 ) , c = ! 0 ) : a [ b ] [ 1 ] . substring ( 0 , a [ b + 1 ] [ 1 ] . length ) == a [ b + 1 ] [ 1 ] && ( a [ b - 1 ] [ 1 ] += a [ b + 1 ] [ 1 ] , a [ b ] [ 1 ] = a [ b ] [ 1 ] . substring ( a [ b + 1 ] [ 1 ] . length ) + a [ b + 1 ] [ 1 ] , a . splice ( b + 1 , 1 ) , c = ! 0 ) ) , b ++ ; c && this . diff _cleanupMerge ( a ) } ;
diff _match _patch . prototype . diff _xIndex = function ( a , b ) { var c = 0 , d = 0 , e = 0 , f = 0 , g ; for ( g = 0 ; g < a . length ; g ++ ) { a [ g ] [ 0 ] !== DIFF _INSERT && ( c += a [ g ] [ 1 ] . length ) ; a [ g ] [ 0 ] !== DIFF _DELETE && ( d += a [ g ] [ 1 ] . length ) ; if ( c > b ) break ; e = c ; f = d } return a . length != g && a [ g ] [ 0 ] === DIFF _DELETE ? f : f + ( b - e ) } ;
diff _match _patch . prototype . diff _prettyHtml = function ( a ) { for ( var b = [ ] , c = /&/g , d = /</g , e = />/g , f = /\n/g , g = 0 ; g < a . length ; g ++ ) { var h = a [ g ] [ 0 ] , l = a [ g ] [ 1 ] . replace ( c , "&" ) . replace ( d , "<" ) . replace ( e , ">" ) . replace ( f , "¶<br>" ) ; switch ( h ) { case DIFF _INSERT : b [ g ] = '<ins style="background:#e6ffe6;">' + l + "</ins>" ; break ; case DIFF _DELETE : b [ g ] = '<del style="background:#ffe6e6;">' + l + "</del>" ; break ; case DIFF _EQUAL : b [ g ] = "<span>" + l + "</span>" } } return b . join ( "" ) } ;
diff _match _patch . prototype . diff _text1 = function ( a ) { for ( var b = [ ] , c = 0 ; c < a . length ; c ++ ) a [ c ] [ 0 ] !== DIFF _INSERT && ( b [ c ] = a [ c ] [ 1 ] ) ; return b . join ( "" ) } ; diff _match _patch . prototype . diff _text2 = function ( a ) { for ( var b = [ ] , c = 0 ; c < a . length ; c ++ ) a [ c ] [ 0 ] !== DIFF _DELETE && ( b [ c ] = a [ c ] [ 1 ] ) ; return b . join ( "" ) } ;
diff _match _patch . prototype . diff _levenshtein = function ( a ) { for ( var b = 0 , c = 0 , d = 0 , e = 0 ; e < a . length ; e ++ ) { var f = a [ e ] [ 1 ] ; switch ( a [ e ] [ 0 ] ) { case DIFF _INSERT : c += f . length ; break ; case DIFF _DELETE : d += f . length ; break ; case DIFF _EQUAL : b += Math . max ( c , d ) , d = c = 0 } } return b += Math . max ( c , d ) } ;
diff _match _patch . prototype . diff _toDelta = function ( a ) { for ( var b = [ ] , c = 0 ; c < a . length ; c ++ ) switch ( a [ c ] [ 0 ] ) { case DIFF _INSERT : b [ c ] = "+" + encodeURI ( a [ c ] [ 1 ] ) ; break ; case DIFF _DELETE : b [ c ] = "-" + a [ c ] [ 1 ] . length ; break ; case DIFF _EQUAL : b [ c ] = "=" + a [ c ] [ 1 ] . length } return b . join ( "\t" ) . replace ( /%20/g , " " ) } ;
diff _match _patch . prototype . diff _fromDelta = function ( a , b ) { for ( var c = [ ] , d = 0 , e = 0 , f = b . split ( /\t/g ) , g = 0 ; g < f . length ; g ++ ) { var h = f [ g ] . substring ( 1 ) ; switch ( f [ g ] . charAt ( 0 ) ) { case "+" : try { c [ d ++ ] = new diff _match _patch . Diff ( DIFF _INSERT , decodeURI ( h ) ) } catch ( k ) { throw Error ( "Illegal escape in diff_fromDelta: " + h ) ; } break ; case "-" : case "=" : var l = parseInt ( h , 10 ) ; if ( isNaN ( l ) || 0 > l ) throw Error ( "Invalid number in diff_fromDelta: " + h ) ; h = a . substring ( e , e += l ) ; "=" == f [ g ] . charAt ( 0 ) ? c [ d ++ ] = new diff _match _patch . Diff ( DIFF _EQUAL , h ) : c [ d ++ ] =
new diff _match _patch . Diff ( DIFF _DELETE , h ) ; break ; default : if ( f [ g ] ) throw Error ( "Invalid diff operation in diff_fromDelta: " + f [ g ] ) ; } } if ( e != a . length ) throw Error ( "Delta length (" + e + ") does not equal source text length (" + a . length + ")." ) ; return c } ; diff _match _patch . prototype . match _main = function ( a , b , c ) { if ( null == a || null == b || null == c ) throw Error ( "Null input. (match_main)" ) ; c = Math . max ( 0 , Math . min ( c , a . length ) ) ; return a == b ? 0 : a . length ? a . substring ( c , c + b . length ) == b ? c : this . match _bitap _ ( a , b , c ) : - 1 } ;
diff _match _patch . prototype . match _bitap _ = function ( a , b , c ) { function d ( a , d ) { var e = a / b . length , g = Math . abs ( c - d ) ; return f . Match _Distance ? e + g / f . Match _Distance : g ? 1 : e } if ( b . length > this . Match _MaxBits ) throw Error ( "Pattern too long for this browser." ) ; var e = this . match _alphabet _ ( b ) , f = this , g = this . Match _Threshold , h = a . indexOf ( b , c ) ; - 1 != h && ( g = Math . min ( d ( 0 , h ) , g ) , h = a . lastIndexOf ( b , c + b . length ) , - 1 != h && ( g = Math . min ( d ( 0 , h ) , g ) ) ) ; var l = 1 << b . length - 1 ; h = - 1 ; for ( var k , m , p = b . length + a . length , x , w = 0 ; w < b . length ; w ++ ) { k = 0 ; for ( m = p ; k < m ; ) d ( w ,
c + m ) <= g ? k = m : p = m , m = Math . floor ( ( p - k ) / 2 + k ) ; p = m ; k = Math . max ( 1 , c - m + 1 ) ; var q = Math . min ( c + m , a . length ) + b . length ; m = Array ( q + 2 ) ; for ( m [ q + 1 ] = ( 1 << w ) - 1 ; q >= k ; q -- ) { var t = e [ a . charAt ( q - 1 ) ] ; m [ q ] = 0 === w ? ( m [ q + 1 ] << 1 | 1 ) & t : ( m [ q + 1 ] << 1 | 1 ) & t | ( x [ q + 1 ] | x [ q ] ) << 1 | 1 | x [ q + 1 ] ; if ( m [ q ] & l && ( t = d ( w , q - 1 ) , t <= g ) ) if ( g = t , h = q - 1 , h > c ) k = Math . max ( 1 , 2 * c - h ) ; else break } if ( d ( w + 1 , c ) > g ) break ; x = m } return h } ;
diff _match _patch . prototype . match _alphabet _ = function ( a ) { for ( var b = { } , c = 0 ; c < a . length ; c ++ ) b [ a . charAt ( c ) ] = 0 ; for ( c = 0 ; c < a . length ; c ++ ) b [ a . charAt ( c ) ] |= 1 << a . length - c - 1 ; return b } ;
diff _match _patch . prototype . patch _addContext _ = function ( a , b ) { if ( 0 != b . length ) { if ( null === a . start2 ) throw Error ( "patch not initialized" ) ; for ( var c = b . substring ( a . start2 , a . start2 + a . length1 ) , d = 0 ; b . indexOf ( c ) != b . lastIndexOf ( c ) && c . length < this . Match _MaxBits - this . Patch _Margin - this . Patch _Margin ; ) d += this . Patch _Margin , c = b . substring ( a . start2 - d , a . start2 + a . length1 + d ) ; d += this . Patch _Margin ; ( c = b . substring ( a . start2 - d , a . start2 ) ) && a . diffs . unshift ( new diff _match _patch . Diff ( DIFF _EQUAL , c ) ) ; ( d = b . substring ( a . start2 + a . length1 ,
a . start2 + a . length1 + d ) ) && a . diffs . push ( new diff _match _patch . Diff ( DIFF _EQUAL , d ) ) ; a . start1 -= c . length ; a . start2 -= c . length ; a . length1 += c . length + d . length ; a . length2 += c . length + d . length } } ;
diff _match _patch . prototype . patch _make = function ( a , b , c ) { if ( "string" == typeof a && "string" == typeof b && "undefined" == typeof c ) { var d = a ; b = this . diff _main ( d , b , ! 0 ) ; 2 < b . length && ( this . diff _cleanupSemantic ( b ) , this . diff _cleanupEfficiency ( b ) ) } else if ( a && "object" == typeof a && "undefined" == typeof b && "undefined" == typeof c ) b = a , d = this . diff _text1 ( b ) ; else if ( "string" == typeof a && b && "object" == typeof b && "undefined" == typeof c ) d = a ; else if ( "string" == typeof a && "string" == typeof b && c && "object" == typeof c ) d = a , b = c ; else throw Error ( "Unknown call format to patch_make." ) ;
if ( 0 === b . length ) return [ ] ; c = [ ] ; a = new diff _match _patch . patch _obj ; for ( var e = 0 , f = 0 , g = 0 , h = d , l = 0 ; l < b . length ; l ++ ) { var k = b [ l ] [ 0 ] , m = b [ l ] [ 1 ] ; e || k === DIFF _EQUAL || ( a . start1 = f , a . start2 = g ) ; switch ( k ) { case DIFF _INSERT : a . diffs [ e ++ ] = b [ l ] ; a . length2 += m . length ; d = d . substring ( 0 , g ) + m + d . substring ( g ) ; break ; case DIFF _DELETE : a . length1 += m . length ; a . diffs [ e ++ ] = b [ l ] ; d = d . substring ( 0 , g ) + d . substring ( g + m . length ) ; break ; case DIFF _EQUAL : m . length <= 2 * this . Patch _Margin && e && b . length != l + 1 ? ( a . diffs [ e ++ ] = b [ l ] , a . length1 += m . length , a . length2 += m . length ) :
m . length >= 2 * this . Patch _Margin && e && ( this . patch _addContext _ ( a , h ) , c . push ( a ) , a = new diff _match _patch . patch _obj , e = 0 , h = d , f = g ) } k !== DIFF _INSERT && ( f += m . length ) ; k !== DIFF _DELETE && ( g += m . length ) } e && ( this . patch _addContext _ ( a , h ) , c . push ( a ) ) ; return c } ;
diff _match _patch . prototype . patch _deepCopy = function ( a ) { for ( var b = [ ] , c = 0 ; c < a . length ; c ++ ) { var d = a [ c ] , e = new diff _match _patch . patch _obj ; e . diffs = [ ] ; for ( var f = 0 ; f < d . diffs . length ; f ++ ) e . diffs [ f ] = new diff _match _patch . Diff ( d . diffs [ f ] [ 0 ] , d . diffs [ f ] [ 1 ] ) ; e . start1 = d . start1 ; e . start2 = d . start2 ; e . length1 = d . length1 ; e . length2 = d . length2 ; b [ c ] = e } return b } ;
diff _match _patch . prototype . patch _apply = function ( a , b ) { if ( 0 == a . length ) return [ b , [ ] ] ; a = this . patch _deepCopy ( a ) ; var c = this . patch _addPadding ( a ) ; b = c + b + c ; this . patch _splitMax ( a ) ; for ( var d = 0 , e = [ ] , f = 0 ; f < a . length ; f ++ ) { var g = a [ f ] . start2 + d , h = this . diff _text1 ( a [ f ] . diffs ) , l = - 1 ; if ( h . length > this . Match _MaxBits ) { var k = this . match _main ( b , h . substring ( 0 , this . Match _MaxBits ) , g ) ; - 1 != k && ( l = this . match _main ( b , h . substring ( h . length - this . Match _MaxBits ) , g + h . length - this . Match _MaxBits ) , - 1 == l || k >= l ) && ( k = - 1 ) } else k = this . match _main ( b , h ,
g ) ; if ( - 1 == k ) e [ f ] = ! 1 , d -= a [ f ] . length2 - a [ f ] . length1 ; else if ( e [ f ] = ! 0 , d = k - g , g = - 1 == l ? b . substring ( k , k + h . length ) : b . substring ( k , l + this . Match _MaxBits ) , h == g ) b = b . substring ( 0 , k ) + this . diff _text2 ( a [ f ] . diffs ) + b . substring ( k + h . length ) ; else if ( g = this . diff _main ( h , g , ! 1 ) , h . length > this . Match _MaxBits && this . diff _levenshtein ( g ) / h . length > this . Patch _DeleteThreshold ) e [ f ] = ! 1 ; else { this . diff _cleanupSemanticLossless ( g ) ; h = 0 ; var m ; for ( l = 0 ; l < a [ f ] . diffs . length ; l ++ ) { var p = a [ f ] . diffs [ l ] ; p [ 0 ] !== DIFF _EQUAL && ( m = this . diff _xIndex ( g , h ) ) ; p [ 0 ] ===
DIFF _INSERT ? b = b . substring ( 0 , k + m ) + p [ 1 ] + b . substring ( k + m ) : p [ 0 ] === DIFF _DELETE && ( b = b . substring ( 0 , k + m ) + b . substring ( k + this . diff _xIndex ( g , h + p [ 1 ] . length ) ) ) ; p [ 0 ] !== DIFF _DELETE && ( h += p [ 1 ] . length ) } } } b = b . substring ( c . length , b . length - c . length ) ; return [ b , e ] } ;
diff _match _patch . prototype . patch _addPadding = function ( a ) { for ( var b = this . Patch _Margin , c = "" , d = 1 ; d <= b ; d ++ ) c += String . fromCharCode ( d ) ; for ( d = 0 ; d < a . length ; d ++ ) a [ d ] . start1 += b , a [ d ] . start2 += b ; d = a [ 0 ] ; var e = d . diffs ; if ( 0 == e . length || e [ 0 ] [ 0 ] != DIFF _EQUAL ) e . unshift ( new diff _match _patch . Diff ( DIFF _EQUAL , c ) ) , d . start1 -= b , d . start2 -= b , d . length1 += b , d . length2 += b ; else if ( b > e [ 0 ] [ 1 ] . length ) { var f = b - e [ 0 ] [ 1 ] . length ; e [ 0 ] [ 1 ] = c . substring ( e [ 0 ] [ 1 ] . length ) + e [ 0 ] [ 1 ] ; d . start1 -= f ; d . start2 -= f ; d . length1 += f ; d . length2 += f } d = a [ a . length - 1 ] ; e = d . diffs ;
0 == e . length || e [ e . length - 1 ] [ 0 ] != DIFF _EQUAL ? ( e . push ( new diff _match _patch . Diff ( DIFF _EQUAL , c ) ) , d . length1 += b , d . length2 += b ) : b > e [ e . length - 1 ] [ 1 ] . length && ( f = b - e [ e . length - 1 ] [ 1 ] . length , e [ e . length - 1 ] [ 1 ] += c . substring ( 0 , f ) , d . length1 += f , d . length2 += f ) ; return c } ;
diff _match _patch . prototype . patch _splitMax = function ( a ) { for ( var b = this . Match _MaxBits , c = 0 ; c < a . length ; c ++ ) if ( ! ( a [ c ] . length1 <= b ) ) { var d = a [ c ] ; a . splice ( c -- , 1 ) ; for ( var e = d . start1 , f = d . start2 , g = "" ; 0 !== d . diffs . length ; ) { var h = new diff _match _patch . patch _obj , l = ! 0 ; h . start1 = e - g . length ; h . start2 = f - g . length ; "" !== g && ( h . length1 = h . length2 = g . length , h . diffs . push ( new diff _match _patch . Diff ( DIFF _EQUAL , g ) ) ) ; for ( ; 0 !== d . diffs . length && h . length1 < b - this . Patch _Margin ; ) { g = d . diffs [ 0 ] [ 0 ] ; var k = d . diffs [ 0 ] [ 1 ] ; g === DIFF _INSERT ? ( h . length2 +=
k . length , f += k . length , h . diffs . push ( d . diffs . shift ( ) ) , l = ! 1 ) : g === DIFF _DELETE && 1 == h . diffs . length && h . diffs [ 0 ] [ 0 ] == DIFF _EQUAL && k . length > 2 * b ? ( h . length1 += k . length , e += k . length , l = ! 1 , h . diffs . push ( new diff _match _patch . Diff ( g , k ) ) , d . diffs . shift ( ) ) : ( k = k . substring ( 0 , b - h . length1 - this . Patch _Margin ) , h . length1 += k . length , e += k . length , g === DIFF _EQUAL ? ( h . length2 += k . length , f += k . length ) : l = ! 1 , h . diffs . push ( new diff _match _patch . Diff ( g , k ) ) , k == d . diffs [ 0 ] [ 1 ] ? d . diffs . shift ( ) : d . diffs [ 0 ] [ 1 ] = d . diffs [ 0 ] [ 1 ] . substring ( k . length ) ) } g = this . diff _text2 ( h . diffs ) ;
g = g . substring ( g . length - this . Patch _Margin ) ; k = this . diff _text1 ( d . diffs ) . substring ( 0 , this . Patch _Margin ) ; "" !== k && ( h . length1 += k . length , h . length2 += k . length , 0 !== h . diffs . length && h . diffs [ h . diffs . length - 1 ] [ 0 ] === DIFF _EQUAL ? h . diffs [ h . diffs . length - 1 ] [ 1 ] += k : h . diffs . push ( new diff _match _patch . Diff ( DIFF _EQUAL , k ) ) ) ; l || a . splice ( ++ c , 0 , h ) } } } ; diff _match _patch . prototype . patch _toText = function ( a ) { for ( var b = [ ] , c = 0 ; c < a . length ; c ++ ) b [ c ] = a [ c ] ; return b . join ( "" ) } ;
diff _match _patch . prototype . patch _fromText = function ( a ) { var b = [ ] ; if ( ! a ) return b ; a = a . split ( "\n" ) ; for ( var c = 0 , d = /^@@ -(\d+),?(\d*) \+(\d+),?(\d*) @@$/ ; c < a . length ; ) { var e = a [ c ] . match ( d ) ; if ( ! e ) throw Error ( "Invalid patch string: " + a [ c ] ) ; var f = new diff _match _patch . patch _obj ; b . push ( f ) ; f . start1 = parseInt ( e [ 1 ] , 10 ) ; "" === e [ 2 ] ? ( f . start1 -- , f . length1 = 1 ) : "0" == e [ 2 ] ? f . length1 = 0 : ( f . start1 -- , f . length1 = parseInt ( e [ 2 ] , 10 ) ) ; f . start2 = parseInt ( e [ 3 ] , 10 ) ; "" === e [ 4 ] ? ( f . start2 -- , f . length2 = 1 ) : "0" == e [ 4 ] ? f . length2 = 0 : ( f . start2 -- , f . length2 =
parseInt ( e [ 4 ] , 10 ) ) ; for ( c ++ ; c < a . length ; ) { e = a [ c ] . charAt ( 0 ) ; try { var g = decodeURI ( a [ c ] . substring ( 1 ) ) } catch ( h ) { throw Error ( "Illegal escape in patch_fromText: " + g ) ; } if ( "-" == e ) f . diffs . push ( new diff _match _patch . Diff ( DIFF _DELETE , g ) ) ; else if ( "+" == e ) f . diffs . push ( new diff _match _patch . Diff ( DIFF _INSERT , g ) ) ; else if ( " " == e ) f . diffs . push ( new diff _match _patch . Diff ( DIFF _EQUAL , g ) ) ; else if ( "@" == e ) break ; else if ( "" !== e ) throw Error ( 'Invalid patch mode "' + e + '" in: ' + g ) ; c ++ } } return b } ;
diff _match _patch . patch _obj = function ( ) { this . diffs = [ ] ; this . start2 = this . start1 = null ; this . length2 = this . length1 = 0 } ;
diff _match _patch . patch _obj . prototype . toString = function ( ) { for ( var a = [ "@@ -" + ( 0 === this . length1 ? this . start1 + ",0" : 1 == this . length1 ? this . start1 + 1 : this . start1 + 1 + "," + this . length1 ) + " +" + ( 0 === this . length2 ? this . start2 + ",0" : 1 == this . length2 ? this . start2 + 1 : this . start2 + 1 + "," + this . length2 ) + " @@\n" ] , b , c = 0 ; c < this . diffs . length ; c ++ ) { switch ( this . diffs [ c ] [ 0 ] ) { case DIFF _INSERT : b = "+" ; break ; case DIFF _DELETE : b = "-" ; break ; case DIFF _EQUAL : b = " " } a [ c + 1 ] = b + encodeURI ( this . diffs [ c ] [ 1 ] ) + "\n" } return a . join ( "" ) . replace ( /%20/g , " " ) } ;
this . diff _match _patch = diff _match _patch ; this . DIFF _DELETE = DIFF _DELETE ; this . DIFF _INSERT = DIFF _INSERT ; this . DIFF _EQUAL = DIFF _EQUAL ;