/* Ċ Ġ* ĠCopyright Ġ 2 0 0 9 - 2 0 1 7 Ġjava - diff - utils . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġdev . git live . diff lib . text Ċ Ċ import Ġdev . git live . diff lib . Bi Function Ċ import Ġdev . git live . diff lib . Bi Predicate Ċ import Ġdev . git live . diff lib . Diff Utils Ċ import Ġdev . git live . diff lib . Function Ċ import Ġdev . git live . diff lib . patch .* Ċ import Ġkotlin . math . max Ċ Ċ /** Ċ Ġ* ĠThis Ġclass Ġfor Ġgenerating ĠDiff Rows Ġfor Ġside - by - sid y Ġview . ĠYou Ġcan Ġcustomize Ċ Ġ* Ġthe Ġway Ġof Ġgenerating . ĠFor Ġexample , Ġshow Ġinline Ġdiffs Ġon Ġnot , Ġignoring Ġwhite Ċ Ġ* Ġspaces Ġor / and Ġblank Ġlines Ġand Ġso Ġon . ĠAll Ġparameters Ġfor Ġgenerating Ġare Ċ Ġ* Ġoptional . ĠIf Ġyou Ġdo Ġnot Ġspecify Ġthem , Ġthe Ġclass Ġwill Ġuse Ġthe Ġdefault Ġvalues . Ċ Ġ* Ċ Ġ* ĠThese Ġvalues Ġare : Ġshow Inline D iffs Ġ= Ġfalse ; Ġignore White Spaces Ġ= Ġtrue ; Ċ Ġ* Ġignore Blank Lines Ġ= Ġtrue ; Ġ... Ċ Ġ* Ċ Ġ* ĠFor Ġinstanti ating Ġthe ĠDiff Row Generator Ġyou Ġshould Ġuse Ġthe Ġits Ġbuilder . ĠLike Ċ Ġ* Ġin Ġexample Ġ Ġ` Ċ Ġ* ĠDiff Row Generator Ġgenerator Ġ= Ġnew ĠDiff Row Generator . Builder (). show Inline D iffs ( true ). Ċ Ġ* Ġignore White Spaces ( true ). column Width ( 1 0 0 ). build (); Ċ ` Ġ* Ċ Ġ*/ Ċ class ĠDiff Row Generator Ġprivate Ġconstructor ( builder : ĠBuilder ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcolumn Width : ĠInt ĊĠĠĠ Ġprivate Ġvar Ġequal izer : ĠBi Predicate < String , ĠString >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġignore White Spaces : ĠBoolean ĊĠĠĠ Ġprivate Ġval Ġinline Diff Splitter : ĠFunction < String , ĠMutable List < String >> ĊĠĠĠ Ġprivate Ġval Ġmerge Original Rev ised : ĠBoolean ĊĠĠĠ Ġprivate Ġval Ġnew Tag : ĠBi Function < Diff Row . Tag , ĠBoolean , ĠString > ĊĠĠĠ Ġprivate Ġval Ġold Tag : ĠBi Function < Diff Row . Tag , ĠBoolean , ĠString > ĊĠĠĠ Ġprivate Ġval Ġreport Lines Un changed : ĠBoolean ĊĠĠĠ Ġprivate Ġval Ġline Normalizer : ĠFunction < String , ĠString > ĊĠĠĠ Ġprivate Ġval Ġprocess D iffs : ĠFunction < String , ĠString >? ĊĠĠĠ Ġprivate Ġval Ġshow Inline D iffs : ĠBoolean ĊĠĠĠ Ġprivate Ġval Ġreplace Original Line feed In Change sWith Spaces : ĠBoolean ĊĠĠĠ Ġprivate Ġval Ġde compress Del tas : ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe ĠDiff Rows Ġdescribing Ġthe Ġdifference Ġbetween Ġoriginal Ġand Ġrev ised ĊĠĠĠĠ Ġ* Ġtexts Ġusing Ġthe Ġgiven Ġpatch . ĠUseful Ġfor Ġdisplaying Ġside - by - side Ġdiff . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġoriginal Ġthe Ġoriginal Ġtext ĊĠĠĠĠ Ġ* Ġ@ param Ġrev ised Ġthe Ġrev ised Ġtext ĊĠĠĠĠ Ġ* Ġ@ return Ġthe ĠDiff Rows Ġbetween Ġoriginal Ġand Ġrev ised Ġtexts ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġgenerate Diff Rows ( original : ĠList < String >, Ġrev ised : ĠList < String >): ĠList < Diff Row > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġgenerate Diff Rows ( original , ĠDiff Utils . diff ( original , Ġrev ised , Ġequal izer )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGenerates Ġthe ĠDiff Rows Ġdescribing Ġthe Ġdifference Ġbetween Ġoriginal Ġand ĊĠĠĠĠ Ġ* Ġrev ised Ġtexts Ġusing Ġthe Ġgiven Ġpatch . ĠUseful Ġfor Ġdisplaying Ġside - by - side ĊĠĠĠĠ Ġ* Ġdiff . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġoriginal Ġthe Ġoriginal Ġtext ĊĠĠĠĠ Ġ* Ġ@ param Ġpatch Ġthe Ġgiven Ġpatch ĊĠĠĠĠ Ġ* Ġ@ return Ġthe ĠDiff Rows Ġbetween Ġoriginal Ġand Ġrev ised Ġtexts ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġgenerate Diff Rows ( original : ĠList < String >, Ġpatch : ĠPatch < String >): ĠList < Diff Row > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdiff Rows : ĠMutable List < Diff Row > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġvar Ġend Pos Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġdelta List : ĠList < Abstract Delta < String >> Ġ= Ġpatch . get Del tas () ĊĠĠĠĠĠĠĠ Ġif Ġ( de compress Del tas ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( original Delta Ġin Ġdelta List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( delta Ġin Ġde compress Del tas ( original Delta )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Pos Ġ= Ġtransform Delta Into Diff Row ( original , Ġend Pos , Ġdiff Rows , Ġdelta ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( delta Ġin Ġdelta List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Pos Ġ= Ġtransform Delta Into Diff Row ( original , Ġend Pos , Ġdiff Rows , Ġdelta ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠCopy Ġthe Ġfinal Ġmatching Ġchunk Ġif Ġany . ĊĠĠĠĠĠĠĠ Ġfor Ġ( line Ġin Ġoriginal . sub List ( end Pos , Ġoriginal . size )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Rows . add ( build Diff Row ( Diff Row . Tag . EQUAL , Ġline , Ġline )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdiff Rows ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTrans forms Ġone Ġpatch Ġdelta Ġinto Ġa ĠDiff Row Ġobject . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġtransform Delta Into Diff Row ( ĊĠĠĠĠĠĠĠ Ġoriginal : ĠList < String >, ĊĠĠĠĠĠĠĠ Ġend Pos : ĠInt , ĊĠĠĠĠĠĠĠ Ġdiff Rows : ĠMutable List < Diff Row >, ĊĠĠĠĠĠĠĠ Ġdelta : ĠAbstract Delta < String > ĊĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġorig : ĠChunk < String > Ġ= Ġdelta . source ĊĠĠĠĠĠĠĠ Ġval Ġrev : ĠChunk < String > Ġ= Ġdelta . target ĊĠĠĠĠĠĠĠ Ġfor Ġ( line Ġin Ġoriginal . sub List ( end Pos , Ġorig . position )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Rows . add ( build Diff Row ( Diff Row . Tag . EQUAL , Ġline , Ġline )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhen Ġ( delta . type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDelta Type . INSERT Ġ-> Ġfor Ġ( line Ġin Ġrev . lines ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Rows . add ( build Diff Row ( Diff Row . Tag . INSERT , Ġ"", Ġline )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDelta Type . DELETE Ġ-> Ġfor Ġ( line Ġin Ġorig . lines ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Rows . add ( build Diff Row ( Diff Row . Tag . DELETE , Ġline , Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġif Ġ( show Inline D iffs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Rows . addAll ( generate Inline D iffs ( delta )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġj Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( j Ġ< Ġmax ( orig . size (), Ġrev . size ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Rows . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Diff Row ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiff Row . Tag . CHANGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( orig . lines . size Ġ> Ġj ) Ġorig . lines [ j ] Ġelse Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rev . lines . size Ġ> Ġj ) Ġrev . lines [ j ] Ġelse Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġorig . last () Ġ+ Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDe comp resses ĠChange Del tas Ġwith Ġdifferent Ġsource Ġand Ġtarget Ġsize Ġto Ġa ĊĠĠĠĠ Ġ* ĠChange Delta Ġwith Ġsame Ġsize Ġand Ġa Ġfollowing ĠInsert Delta Ġor ĠDelete Delta . ĊĠĠĠĠ Ġ* ĠWith Ġthis Ġproblems Ġof Ġbuilding ĠDiff Rows Ġgetting Ġsmaller . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdelta ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġde compress Del tas ( delta : ĠAbstract Delta < String >): ĠList < Abstract Delta < String >> Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( delta . type Ġ== ĠDelta Type . CHANGE Ġ&& Ġdelta . source . size () Ġ!= Ġdelta . target . size ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdelt as : ĠMutable List < Abstract Delta < String >> Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// System . out . println (" de compress Ġthis Ġ" Ġ+ Ġdelta ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin Size Ġ= Ġdelta . source . size (). coerce At Most ( delta . target . size ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġorig : ĠChunk < String > Ġ= Ġdelta . source ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrev : ĠChunk < String > Ġ= Ġdelta . target ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelt as . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChange Delta ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChunk ( orig . position , Ġorig . lines . sub List ( 0 , Ġmin Size )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChunk ( rev . position , Ġrev . lines . sub List ( 0 , Ġmin Size )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( orig . lines . size Ġ< Ġrev . lines . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelt as . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInsert Delta ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChunk ( orig . position Ġ+ Ġmin Size , Ġempty List ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChunk ( rev . position Ġ+ Ġmin Size , Ġrev . lines . sub List ( min Size , Ġrev . lines . size )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelt as . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDelete Delta ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChunk ( orig . position Ġ+ Ġmin Size , Ġorig . lines . sub List ( min Size , Ġorig . lines . size )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChunk ( rev . position Ġ+ Ġmin Size , Ġempty List ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdelt as ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( delta ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Diff Row ( type : ĠDiff Row . Tag , Ġorg line : ĠString , Ġnewline : ĠString ): ĠDiff Row Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( report Lines Un changed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDiff Row ( type , Ġorg line , Ġnewline ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwrap Org Ġ= Ġpreprocess Line ( org line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Diff Row . Tag . DELETE Ġ== Ġtype ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( merge Original Rev ised Ġ|| Ġshow Inline D iffs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrap Org Ġ= Ġold Tag ( type , Ġtrue ) Ġ+ Ġwrap Org Ġ+ Ġold Tag ( type , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwrap New Ġ= Ġpreprocess Line ( newline ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Diff Row . Tag . INSERT Ġ== Ġtype ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( merge Original Rev ised ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrap Org Ġ= Ġnew Tag ( type , Ġtrue ) Ġ+ Ġwrap New Ġ+ Ġnew Tag ( type , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( show Inline D iffs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrap New Ġ= Ġnew Tag ( type , Ġtrue ) Ġ+ Ġwrap New Ġ+ Ġnew Tag ( type , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDiff Row ( type , Ġwrap Org , Ġwrap New ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Diff Row Without Normal izing ( type : ĠDiff Row . Tag , Ġorg line : ĠString , Ġnewline : ĠString ): ĠDiff Row Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠDiff Row ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtype , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStringUtils . wrap Text ( org line , Ġcolumn Width ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStringUtils . wrap Text ( newline , Ġcolumn Width ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnormalize Lines ( list : ĠList < String >): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( report Lines Un changed ) Ġlist Ġelse Ġlist . as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġt : ĠString Ġ-> Ġline Normalizer ( t ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAdd Ġthe Ġinline Ġdiffs Ġfor Ġgiven Ġdelta ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġdelta Ġthe Ġgiven Ġdelta ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġgenerate Inline D iffs ( delta : ĠAbstract Delta < String >): ĠList < Diff Row > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġorig Ġ= Ġnormalize Lines ( delta . source . lines ) ĊĠĠĠĠĠĠĠ Ġval Ġrev Ġ= Ġnormalize Lines ( delta . target . lines ) ĊĠĠĠĠĠĠĠ Ġval Ġorig List : ĠMutable List < String > ĊĠĠĠĠĠĠĠ Ġval Ġrev List : ĠMutable List < String > ĊĠĠĠĠĠĠĠ Ġval Ġjoined Orig Ġ= Ġorig . join ToString ("\ n ") ĊĠĠĠĠĠĠĠ Ġval Ġjoined Rev Ġ= Ġrev . join ToString ("\ n ") ĊĠĠĠĠĠĠĠ Ġorig List Ġ= Ġinline Diff Splitter ( joined Orig ) ĊĠĠĠĠĠĠĠ Ġrev List Ġ= Ġinline Diff Splitter ( joined Rev ) ĊĠĠĠĠĠĠĠ Ġval Ġinline Del tas : ĠMutable List < Abstract Delta < String >> Ġ= ĠDiff Utils . diff ( orig List , Ġrev List , Ġequal izer ). get Del tas () ĊĠĠĠĠĠĠĠ Ġinline Del tas . reverse () ĊĠĠĠĠĠĠĠ Ġfor Ġ( inline Delta Ġin Ġinline Del tas ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinline Orig : ĠChunk < String > Ġ= Ġinline Delta . source ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinline Rev : ĠChunk < String > Ġ= Ġinline Delta . target ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( inline Delta . type Ġ== ĠDelta Type . DELETE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrap In Tag ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorig List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinline Orig . position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinline Orig ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġinline Orig . size (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiff Row . Tag . DELETE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess D iffs , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreplace Original Line feed In Change sWith Spaces Ġ&& Ġmerge Original Rev ised ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( inline Delta . type Ġ== ĠDelta Type . INSERT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( merge Original Rev ised ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorig List . addAll ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinline Orig . position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrev List . sub List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinline Rev . position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinline Rev . position Ġ+ Ġinline Rev . size () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrap In Tag ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorig List , Ġinline Orig . position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinline Orig . position Ġ+ Ġinline Rev . size (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiff Row . Tag . INSERT , Ġnew Tag , Ġprocess D iffs , Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrap In Tag ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrev List , Ġinline Rev . position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinline Rev . position Ġ+ Ġinline Rev . size (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiff Row . Tag . INSERT , Ġnew Tag , Ġprocess D iffs , Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( inline Delta . type Ġ== ĠDelta Type . CHANGE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( merge Original Rev ised ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorig List . addAll ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinline Orig . position Ġ+ Ġinline Orig . size (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrev List . sub List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinline Rev . position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinline Rev . position Ġ+ Ġinline Rev . size () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrap In Tag ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorig List , Ġinline Orig . position Ġ+ Ġinline Orig . size (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinline Orig . position Ġ+ Ġinline Orig . size () Ġ+ Ġinline Rev . size (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiff Row . Tag . CHANGE , Ġnew Tag , Ġprocess D iffs , Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrap In Tag ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrev List , Ġinline Rev . position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinline Rev . position Ġ+ Ġinline Rev . size (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiff Row . Tag . CHANGE , Ġnew Tag , Ġprocess D iffs , Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrap In Tag ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorig List , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinline Orig . position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinline Orig . position Ġ+ Ġinline Orig . size (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiff Row . Tag . CHANGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess D iffs , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreplace Original Line feed In Change sWith Spaces Ġ&& Ġmerge Original Rev ised ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġorig Result Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġval Ġrev Result Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġfor Ġ( character Ġin Ġorig List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorig Result . append ( character ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( character Ġin Ġrev List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrev Result . append ( character ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġoriginal Ġ= Ġorig Result . toString (). trim End ('\ n '). lines () ĊĠĠĠĠĠĠĠ Ġval Ġrev ised Ġ= Ġrev Result . toString (). trim End ('\ n '). lines () ĊĠĠĠĠĠĠĠ Ġval Ġdiff Rows : ĠMutable List < Diff Row > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġ 0 Ġuntil Ġmax ( original . size , Ġrev ised . size )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdiff Rows . add ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Diff Row Without Normal izing ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiff Row . Tag . CHANGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( original . size Ġ> Ġj ) Ġoriginal [ j ] Ġelse Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rev ised . size Ġ> Ġj ) Ġrev ised [ j ] Ġelse Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdiff Rows ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpreprocess Line ( line : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( column Width Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline Normalizer ( line ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStringUtils . wrap Text ( line Normalizer ( line ), Ġcolumn Width ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġclass Ġused Ġfor Ġbuilding Ġthe ĠDiff Row Generator . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ author Ġd mit ry ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġclass ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġshow Inline D iffs Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġignore White Spaces Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġde compress Del tas Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġvar Ġold Tag Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ_: ĠDiff Row . Tag , Ġf : ĠBoolean Ġ-> Ġif Ġ( f ) Ġ"< span Ġclass =\" edit Old Inline \"> " Ġelse Ġ"</ span >" Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġnew Tag Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ_: ĠDiff Row . Tag , Ġf : ĠBoolean Ġ-> Ġif Ġ( f ) Ġ"< span Ġclass =\" edit New Inline \"> " Ġelse Ġ"</ span >" Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġcolumn Width Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmerge Original Rev ised Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġreport Lines Un changed Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġinline Diff Splitter Ġ= ĠSPL IT TER _ BY _ CHARACTER ĊĠĠĠĠĠĠĠ Ġvar Ġline Normalizer Ġ= ĠLINE _ NORMAL IZER _ FOR _ HTML ĊĠĠĠĠĠĠĠ Ġvar Ġprocess D iffs : ĠFunction < String , ĠString >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġequal izer : ĠBi Predicate < String , ĠString >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġreplace Original Line feed In Change sWith Spaces Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠShow Ġinline Ġdiffs Ġin Ġgenerating Ġdiff Ġrows Ġor Ġnot . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġval Ġthe Ġvalue Ġto Ġset . ĠDefault : Ġfalse . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġbuilder Ġwith Ġconfigured Ġshow Inline Diff Ġparameter ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġshow Inline D iffs (` val `: ĠBoolean ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Inline D iffs Ġ= Ġ` val ` ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠIgnore Ġwhite Ġspaces Ġin Ġgenerating Ġdiff Ġrows Ġor Ġnot . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġval Ġthe Ġvalue Ġto Ġset . ĠDefault : Ġtrue . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġbuilder Ġwith Ġconfigured Ġignore White Spaces Ġparameter ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġignore White Spaces (` val `: ĠBoolean ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġignore White Spaces Ġ= Ġ` val ` ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGive Ġthe Ġorigin ial Ġold Ġand Ġnew Ġtext Ġlines Ġto ĠDiff row Ġwithout Ġany ĊĠĠĠĠĠĠĠĠ Ġ* Ġadditional Ġprocessing Ġand Ġwithout Ġany Ġtags Ġto Ġhighlight Ġthe Ġchange . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġval Ġthe Ġvalue Ġto Ġset . ĠDefault : Ġfalse . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġbuilder Ġwith Ġconfigured Ġreport Lines Un Wrapped Ġparameter ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġreport Lines Un changed (` val `: ĠBoolean ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport Lines Un changed Ġ= Ġ` val ` ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGenerator Ġfor ĠOld - Text - Tags . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġgenerator Ġthe Ġtag Ġgenerator ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġbuilder Ġwith Ġconfigured Ġignore Blank Lines Ġparameter ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġold Tag ( generator : ĠBi Function < Diff Row . Tag , ĠBoolean , ĠString >): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Tag Ġ= Ġgenerator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGenerator Ġfor ĠOld - Text - Tags . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġgenerator Ġthe Ġtag Ġgenerator ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġbuilder Ġwith Ġconfigured Ġignore Blank Lines Ġparameter ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġold Tag ( generator : ĠFunction < Boolean ?, ĠString >): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Tag Ġ= Ġ{ Ġ_: ĠDiff Row . Tag ?, Ġf : ĠBoolean ? Ġ-> Ġgenerator ( f ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGenerator Ġfor ĠNew - Text - Tags . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġgenerator ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Tag ( generator : ĠBi Function < Diff Row . Tag , ĠBoolean , ĠString >): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Tag Ġ= Ġgenerator ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠGenerator Ġfor ĠNew - Text - Tags . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġgenerator ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġnew Tag ( generator : ĠFunction < Boolean ?, ĠString >): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Tag Ġ= Ġ{ Ġ_: ĠDiff Row . Tag ?, Ġf : ĠBoolean ? Ġ-> Ġgenerator ( f ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠProcessor Ġfor Ġdiff ed Ġtext Ġparts . ĠHere Ġe . g . Ġwhite characters Ġcould Ġbe ĊĠĠĠĠĠĠĠĠ Ġ* Ġreplaced Ġby Ġsomething Ġvisible . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġprocess D iffs ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġprocess D iffs ( process D iffs : ĠFunction < String , ĠString >? ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . process D iffs Ġ= Ġprocess D iffs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSet Ġthe Ġcolumn Ġwidth Ġof Ġgenerated Ġlines Ġof Ġoriginal Ġand Ġrev ised ĊĠĠĠĠĠĠĠĠ Ġ* Ġtexts . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġwidth Ġthe Ġwidth Ġto Ġset . ĠMaking Ġit Ġ& lt ; Ġ 0 Ġdoesn 't Ġmake Ġany ĊĠĠĠĠĠĠĠĠ Ġ* Ġsense . ĠDefault Ġ 8 0 . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġbuilder Ġwith Ġconfig Ġof Ġcolumn Ġwidth ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġcolumn Width ( width : ĠInt ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( width Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumn Width Ġ= Ġwidth ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠBuild Ġthe ĠDiff Row Generator . ĠIf Ġsome Ġparameters Ġis Ġnot Ġset , Ġthe ĊĠĠĠĠĠĠĠĠ Ġ* Ġdefault Ġvalues Ġare Ġused . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġthe Ġcustomized ĠDiff Row Generator ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠDiff Row Generator Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDiff Row Generator ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠMerge Ġthe Ġcomplete Ġresult Ġwithin Ġthe Ġoriginal Ġtext . ĠThis Ġmakes Ġsense ĊĠĠĠĠĠĠĠĠ Ġ* Ġfor Ġone Ġline Ġdisplay . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġmerge Original Rev ised ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġmerge Original Rev ised ( merge Original Rev ised : ĠBoolean ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . merge Original Rev ised Ġ= Ġmerge Original Rev ised ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠDel tas Ġcould Ġbe Ġin Ġa Ġstate , Ġthat Ġwould Ġproduce Ġsome Ġun reason able ĊĠĠĠĠĠĠĠĠ Ġ* Ġresults Ġwithin Ġan Ġinline Ġdiff . ĠSo Ġthe Ġdelt as Ġare Ġde compressed Ġinto ĊĠĠĠĠĠĠĠĠ Ġ* Ġsmaller Ġparts Ġand Ġrebuild . ĠBut Ġthis Ġcould Ġresult Ġin Ġmore Ġdifferences . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġde compress Del tas ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġde compress Del tas ( de compress Del tas : ĠBoolean ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . de compress Del tas Ġ= Ġde compress Del tas ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠPer Ġdefault Ġeach Ġcharacter Ġis Ġsepar at ly Ġprocessed . ĠThis Ġvariant ĊĠĠĠĠĠĠĠĠ Ġ* Ġintroduces Ġprocessing Ġby Ġword , Ġwhich Ġdoes Ġnot Ġdeliver Ġin Ġword ĊĠĠĠĠĠĠĠĠ Ġ* Ġchanges . ĠTherefore Ġthe Ġwhole Ġword Ġwill Ġbe Ġtagged Ġas Ġchanged : ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ< pre > ĊĠĠĠĠĠĠĠĠ Ġ* Ġfalse : ĠĠĠ Ġ( a Ba Ġ: Ġab a ) Ġ-- Ġ Ġchanged : Ġa ( B ) a Ġ: Ġa ( b ) a ĊĠĠĠĠĠĠĠĠ Ġ* Ġtrue : ĠĠĠĠ Ġ( a Ba Ġ: Ġab a ) Ġ-- Ġ Ġchanged : Ġ( a Ba ) Ġ: Ġ( aba ) ĊĠĠĠĠĠĠĠ Ġ</ pre > Ġ* ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġinline Diff By Word ( inline Diff By Word : ĠBoolean ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinline Diff Splitter Ġ= Ġif Ġ( inline Diff By Word ) ĠSPL IT TER _ BY _ WORD Ġelse ĠSPL IT TER _ BY _ CHARACTER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠTo Ġprovide Ġsome Ġcustomized Ġsplitting Ġa Ġsplit ter Ġcan Ġbe Ġprovided . ĠHere ĊĠĠĠĠĠĠĠĠ Ġ* Ġsomeone Ġcould Ġthink Ġabout Ġsentence Ġsplit ter , Ġcomma Ġsplit ter Ġor Ġstuff ĊĠĠĠĠĠĠĠĠ Ġ* Ġlike Ġthat . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġinline Diff Splitter ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġinline Diff By Splitter ( inline Diff Splitter : ĠFunction < String , ĠMutable List < String >> ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . inline Diff Splitter Ġ= Ġinline Diff Splitter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠBy Ġdefault ĠDiff Row Generator Ġpre processes Ġlines Ġfor ĠHTML Ġoutput . ĠTabs ĊĠĠĠĠĠĠĠĠ Ġ* Ġand Ġspecial ĠHTML Ġcharacters Ġlike Ġ"& lt ;" Ġare Ġreplaced Ġwith Ġits Ġencoded ĊĠĠĠĠĠĠĠĠ Ġ* Ġvalue . ĠTo Ġchange Ġthis Ġyou Ġcan Ġprovide Ġa Ġcustomized Ġline Ġnormal izer ĊĠĠĠĠĠĠĠĠ Ġ* Ġhere . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġline Normalizer ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġline Normalizer ( line Normalizer : ĠFunction < String , ĠString >): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . line Normalizer Ġ= Ġline Normalizer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠProvide Ġan Ġequal izer Ġfor Ġdiff Ġprocessing . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġequal izer Ġequal izer Ġfor Ġdiff Ġprocessing . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġbuilder Ġwith Ġconfigured Ġequal izer Ġparameter ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġequal izer ( equal izer : ĠBi Predicate < String , ĠString >? ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . equal izer Ġ= Ġequal izer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSometimes Ġit Ġhappens Ġthat Ġa Ġchange Ġcontains Ġmultiple Ġlines . ĠIf Ġthere ĊĠĠĠĠĠĠĠĠ Ġ* Ġis Ġno Ġcorrespond ence Ġin Ġold Ġand Ġnew . ĠTo Ġkeep Ġthe Ġmerged Ġline Ġmore ĊĠĠĠĠĠĠĠĠ Ġ* Ġreadable Ġthe Ġline feeds Ġcould Ġbe Ġreplaced Ġby Ġspaces . ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġreplace ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġreplace Original Line feed In Change sWith Spaces ( replace : ĠBoolean ): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace Original Line feed In Change sWith Spaces Ġ= Ġreplace ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠDEFAULT _ EQUAL IZER Ġ= Ġ{ Ġobj 1 : ĠString , Ġobj 2 : ĠString Ġ-> Ġobj 1 Ġ== Ġobj 2 Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠIG NORE _ WH ITES PACE _ EQUAL IZER Ġ= Ġ{ Ġoriginal : ĠString , Ġrev ised : ĠString Ġ-> Ġadjust Whitespace ( original ) Ġ== Ġadjust Whitespace ( rev ised ) Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠLINE _ NORMAL IZER _ FOR _ HTML Ġ= Ġ{ Ġobj : ĠString Ġ-> ĠStringUtils . normalize ( obj ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSplit ting Ġlines Ġby Ġcharacter Ġto Ġachieve Ġchar Ġby Ġchar Ġdiff Ġchecking . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠSPL IT TER _ BY _ CHARACTER Ġ= Ġ{ Ġline : ĠString Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist : ĠMutable List < String > Ġ= ĠArrayList < String >( line . length ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( character Ġin Ġline ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( character . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ@ kotlin . jvm . Jvm Field ĊĠĠĠĠĠĠĠ Ġval ĠSPL IT _ BY _ WORD _ PATTERN Ġ= ĠRegex ("\\ s + |[ ,. \\ [ \\ ]() {} / \\\\ * + \\ - # ]") ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠSplit ting Ġlines Ġby Ġword Ġto Ġachieve Ġword Ġby Ġword Ġdiff Ġchecking . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval ĠSPL IT TER _ BY _ WORD Ġ= Ġ{ Ġline : ĠString Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsplit String Preserve Delimiter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSPL IT _ BY _ WORD _ PATTERN ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval ĠWH ITES PACE _ PATTERN Ġ= ĠRegex ("\\ s +") ĊĠĠĠĠĠĠĠ Ġ@ kotlin . jvm . Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġcreate (): ĠBuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBuilder () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġadjust Whitespace ( raw : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠWH ITES PACE _ PATTERN . replace ( raw . trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ}, Ġ" Ġ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ@ kotlin . jvm . Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġsplit String Preserve Delimiter ( str : ĠString ?, ĠSPL IT _ PATTERN : ĠRegex ): ĠMutable List < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( str Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresults Ġ= ĠSPL IT _ PATTERN . findAll ( str ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġpos Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( result Ġin Ġresults ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pos Ġ< Ġresult . range . first ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( str . substring ( pos , Ġresult . range . first )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( result . value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpos Ġ= Ġresult . range . last Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pos Ġ< Ġstr . length ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( str . substring ( pos )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlist ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠWrap Ġthe Ġelements Ġin Ġthe Ġsequence Ġwith Ġthe Ġgiven Ġtag ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param ĠstartPosition Ġthe Ġposition Ġfrom Ġwhich Ġtag Ġshould Ġstart . ĠThe ĊĠĠĠĠĠĠĠĠ Ġ* Ġcounting Ġstart Ġfrom Ġa Ġzero . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġend Position Ġthe Ġposition Ġbefore Ġwhich Ġtag Ġshould Ġshould Ġbe Ġclosed . ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġtag Generator Ġthe Ġtag Ġgenerator ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġwrap In Tag ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsequence : ĠMutable List < String >, ĠstartPosition : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Position : ĠInt , Ġtag : ĠDiff Row . Tag , Ġtag Generator : ĠBi Function < Diff Row . Tag , ĠBoolean , ĠString >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprocess D iffs : ĠFunction < String , ĠString > ?, Ġreplace Line feed With Space : ĠBoolean ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġend Pos Ġ= Ġend Position ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( end Pos Ġ>= ĠstartPosition ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// search Ġposition Ġfor Ġend Ġtag ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( end Pos Ġ> ĠstartPosition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(" \ n " Ġ!= Ġsequence [ end Pos Ġ- Ġ 1 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( replace Line feed With Space ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence [ end Pos Ġ- Ġ 1 ] Ġ= Ġ" Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Pos -- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( end Pos Ġ== ĠstartPosition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence . add ( end Pos , Ġtag Generator ( tag , Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( process D iffs Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence [ end Pos Ġ- Ġ 1 ] Ġ= Ġprocess D iffs ( sequence [ end Pos Ġ- Ġ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Pos -- ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// search Ġposition Ġfor Ġend Ġtag ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( end Pos Ġ> ĠstartPosition ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(" \ n " Ġ== Ġsequence [ end Pos Ġ- Ġ 1 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( replace Line feed With Space ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence [ end Pos Ġ- Ġ 1 ] Ġ= Ġ" Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( process D iffs Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence [ end Pos Ġ- Ġ 1 ] Ġ= Ġprocess D iffs ( sequence [ end Pos Ġ- Ġ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Pos -- ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsequence . add ( end Pos , Ġtag Generator ( tag , Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġend Pos -- ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Inline D iffs Ġ= Ġbuilder . show Inline D iffs ĊĠĠĠĠĠĠĠ Ġignore White Spaces Ġ= Ġbuilder . ignore White Spaces ĊĠĠĠĠĠĠĠ Ġold Tag Ġ= Ġbuilder . old Tag ĊĠĠĠĠĠĠĠ Ġnew Tag Ġ= Ġbuilder . new Tag ĊĠĠĠĠĠĠĠ Ġcolumn Width Ġ= Ġbuilder . column Width ĊĠĠĠĠĠĠĠ Ġmerge Original Rev ised Ġ= Ġbuilder . merge Original Rev ised ĊĠĠĠĠĠĠĠ Ġinline Diff Splitter Ġ= Ġbuilder . inline Diff Splitter ĊĠĠĠĠĠĠĠ Ġde compress Del tas Ġ= Ġbuilder . de compress Del tas ĊĠĠĠĠĠĠĠ Ġequal izer Ġ= Ġif Ġ( builder . equal izer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . equal izer ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ignore White Spaces ) ĠIG NORE _ WH ITES PACE _ EQUAL IZER Ġelse ĠDEFAULT _ EQUAL IZER ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreport Lines Un changed Ġ= Ġbuilder . report Lines Un changed ĊĠĠĠĠĠĠĠ Ġline Normalizer Ġ= Ġbuilder . line Normalizer ĊĠĠĠĠĠĠĠ Ġprocess D iffs Ġ= Ġbuilder . process D iffs ĊĠĠĠĠĠĠĠ Ġreplace Original Line feed In Change sWith Spaces Ġ= Ġbuilder . replace Original Line feed In Change sWith Spaces ĊĠĠĠ Ġ} Ċ }