/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ~ 2 0 2 0 Ġ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 Ġcom . i dex . text . diff Ċ Ċ import Ġcom . i dex . diff . Delta Type Ċ import Ġcom . i dex . text . Mutable Text ĊĊ Ċ /** Ċ Ġ* ĠAbstract Ġdelta Ġbetween Ġa Ġsource Ġand Ġa Ġtarget . Ċ Ġ* Ġ@ author ĠT ob ias ĠWar ne ke Ġ( t . war ne ke @ g mx . net ) Ċ Ġ*/ Ċ sealed Ġclass ĠText Delta Ġ{ Ċ ĉ abstract Ġval Ġtype : ĠDelta Type Ċ ĉ abstract Ġval Ġsource : ĠText Chunk Ċ ĉ abstract Ġval Ġtarget : ĠText Chunk ĊĉĊ ĉ protected Ġfun Ġverify Chunk ( target : ĠCharSequence ) Ġ{ Ċĉ ĉ source . verify ( target ) Ċ ĉ } ĊĉĊ ĉ abstract Ġfun Ġapply To ( target : ĠMutable Text ) ĊĉĊ ĉ abstract Ġfun Ġrestore ( target : ĠMutable Text ) ĊĉĊ ĉ /** Ċĉ Ġ* ĠCreate Ġa Ġnew Ġdelta Ġof Ġthe Ġactual Ġinstance Ġwith Ġcustomized Ġchunk Ġdata . Ċĉ Ġ*/ Ċ ĉ abstract Ġfun Ġwith Chunks ( original : ĠText Chunk , Ġrev ised : ĠText Chunk ): ĠText Delta Ċ } ĊĊ Ċ data Ġclass ĠEqual Text Delta ( val Ġdata : ĠText Chunk ) Ġ: ĠText Delta () Ġ{ Ċ ĉ constructor ( source : ĠText Chunk , Ġtarget : ĠText Chunk ) Ġ: Ġthis ( source ) Ġ{ Ċĉ ĉ check ( source Ġ== Ġtarget ) Ċ ĉ } ĊĉĊ ĉ override Ġval Ġtype Ġget () Ġ= ĠDelta Type . equal ĊĉĊ ĉ override Ġval Ġsource Ġget () Ġ= Ġdata Ċ ĉ override Ġval Ġtarget Ġget () Ġ= Ġdata ĊĉĊ ĉ override Ġfun Ġapply To ( target : ĠMutable Text ) Ġ{ Ċĉ ĉ verify Chunk ( target ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġrestore ( target : ĠMutable Text ) Ġ{} ĊĉĊ ĉ override Ġfun ĠtoString () Ġ= Ġ"[ Equal Delta , Ġposition : Ġ${ source . position }, Ġlines : Ġ${ source . replacement }] " ĊĉĊ ĉ override Ġfun Ġwith Chunks ( original : ĠText Chunk , Ġrev ised : ĠText Chunk ) Ġ= ĠEqual Text Delta ( original , Ġrev ised ) Ċ } Ċ Ċ /** Ċ Ġ* ĠDescri bes Ġthe Ġadd - delta Ġbetween Ġoriginal Ġand Ġrev ised Ġtexts . Ċ Ġ* Ġ`` Ġis Ġthe Ġtype Ġof Ġthe Ġcompared Ġelements Ġin Ġthe Ġ' lines '. Ċ Ġ* Ċ Ġ* Ġ@ author Ġ[ D mit ry ĠNa um enko ]( dm . na um enko @ gmail . com ) Ċ Ġ*/ Ċ data Ġclass ĠInsert Text Delta ( override Ġval Ġsource : ĠText Chunk , Ġoverride Ġval Ġtarget : ĠText Chunk ) Ġ: ĠText Delta () Ġ{ Ċ ĉ override Ġval Ġtype Ġget () Ġ= ĠDelta Type . insert ĊĉĊ ĉ override Ġfun Ġapply To ( target : ĠMutable Text ) Ġ{ Ċĉ ĉ verify Chunk ( target ) Ċĉ ĉ target . insert ( source . position , Ġthis . target . replacement ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġrestore ( target : ĠMutable Text ) Ġ{ Ċĉ ĉ val Ġposition Ġ= Ġthis . target . position Ċĉ ĉ target . remove ( position , Ġposition Ġ+ Ġthis . target . size ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġwith Chunks ( original : ĠText Chunk , Ġrev ised : ĠText Chunk ) Ġ= ĠInsert Text Delta ( original , Ġrev ised ) ĊĉĊ ĉ override Ġfun ĠtoString () Ġ= Ġ"[ Insert Delta , Ġposition : Ġ${ source . position }, Ġlines : Ġ${ target . replacement }] " Ċ } Ċ Ċ /** Ċ Ġ* ĠDescri bes Ġthe Ġdelete - delta Ġbetween Ġoriginal Ġand Ġrev ised Ġtexts . Ċ Ġ* Ġ`` Ġis Ġthe Ġtype Ġof Ġthe Ġcompared Ġelements Ġin Ġthe Ġ' lines '. Ċ Ġ* Ċ Ġ* Ġ@ author Ġ[ D mit ry ĠNa um enko ]( dm . na um enko @ gmail . com ) Ċ Ġ*/ Ċ data Ġclass ĠDelete Text Delta ( override Ġval Ġsource : ĠText Chunk , Ġoverride Ġval Ġtarget : ĠText Chunk ) Ġ: ĠText Delta () Ġ{ Ċ ĉ override Ġval Ġtype Ġget () Ġ= ĠDelta Type . delete ĊĉĊ ĉ override Ġfun Ġapply To ( target : ĠMutable Text ) Ġ{ Ċĉ ĉ verify Chunk ( target ) Ċĉ ĉ val Ġposition Ġ= Ġsource . position Ċĉ ĉ target . remove ( position , Ġposition Ġ+ Ġsource . size ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġrestore ( target : ĠMutable Text ) Ġ{ Ċĉ ĉ target . insert ( this . target . position , Ġsource . replacement ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġwith Chunks ( original : ĠText Chunk , Ġrev ised : ĠText Chunk ) Ġ= ĠDelete Text Delta ( original , Ġrev ised ) ĊĉĊ ĉ override Ġfun ĠtoString () Ġ= Ġ"[ Delete Delta , Ġposition : Ġ${ source . position }, Ġlines : Ġ${ source . replacement }] " Ċ } ĊĊ Ċ /** Ċ Ġ* ĠDescri bes Ġthe Ġchange - delta Ġbetween Ġoriginal Ġand Ġrev ised Ġtexts . Ċ Ġ* Ġ`` Ġis Ġthe Ġtype Ġof Ġthe Ġcompared Ġelements Ġin Ġthe Ġdata Ġ' lines '. Ċ Ġ* Ċ Ġ* Ġ@ author Ġ[ D mit ry ĠNa um enko ]( dm . na um enko @ gmail . com ) Ċ Ġ*/ Ċ data Ġclass ĠChange Text Delta ( override Ġval Ġsource : ĠText Chunk , Ġoverride Ġval Ġtarget : ĠText Chunk ) Ġ: ĠText Delta () Ġ{ Ċ ĉ override Ġval Ġtype Ġ= ĠDelta Type . change ĊĉĊ ĉ override Ġfun Ġapply To ( target : ĠMutable Text ) Ġ{ Ċĉ ĉ verify Chunk ( target ) Ċĉ ĉ val Ġposition Ġ= Ġsource . position Ċĉ ĉ target . replace ( startIndex Ġ= Ġposition , Ġend Index Ġ= Ġposition Ġ+ Ġsource . size , Ġreplacement Ġ= Ġthis . target . replacement ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġrestore ( target : ĠMutable Text ) Ġ{ Ċĉ ĉ val Ġposition Ġ= Ġthis . target . position Ċĉ ĉ target . replace ( position , Ġposition Ġ+ Ġthis . target . size , Ġthis . source . replacement ) Ċ ĉ } ĊĉĊ ĉ override Ġfun Ġwith Chunks ( original : ĠText Chunk , Ġrev ised : ĠText Chunk ) Ġ= ĠChange Text Delta ( original , Ġrev ised ) ĊĉĊ ĉ override Ġfun ĠtoString () Ġ= Ċĉ ĉ "[ Change Delta , Ġposition : Ġ${ source . position }, Ġlines : Ġ${ source . replacement } Ġto Ġ${ target . replacement }] " Ċ } Ċ