package Ġcom . se an sh ub in . cond orc et . util Ċ Ċ object ĠList Difference Ġ{ ĊĠĠĠ Ġfun Ġ< T > Ġcompare ( first : ĠList < T >, Ġsecond : ĠList < T >): ĠD ifference Ġ= Ġcompare (" a ", Ġfirst , Ġ" b ", Ġsecond ) ĊĊĠĠĠ Ġfun Ġ< T > Ġcompare ( a Caption : ĠString , Ġa : ĠList < T >, Ġb Caption : ĠString , Ġb : ĠList < T >): ĠD ifference Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġmessage Lines Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġvar Ġdone Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġis Same Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġwhile Ġ(! done ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠPair ( index Ġ< Ġa . size , Ġindex Ġ< Ġb . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( p ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( false , Ġfalse ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdone Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( false , Ġtrue ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Lines . add (" different -$ a Caption [$ index ]: Ġ< missing >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Lines . add (" different -$ b Caption [$ index ]: Ġ${ b [ index ]} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdone Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Same Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( true , Ġfalse ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Lines . add (" different -$ a Caption [$ index ]: Ġ${ a [ index ]} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Lines . add (" different -$ b Caption [$ index ]: Ġ< missing >") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdone Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Same Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( true , Ġtrue ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( a [ index ] Ġ== Ġb [ index ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Lines . add (" same [$ index ]: Ġ${ a [ index ]} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Lines . add (" different -$ a Caption [$ index ]: Ġ${ a [ index ]} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Lines . add (" different -$ b Caption [$ index ]: Ġ${ b [ index ]} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdone Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Same Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġfirst Line Ġ= Ġif Ġ( is Same ) Ġ" no Ġdifferences " Ġelse Ġ" different Ġat Ġindex Ġ$ index " ĊĠĠĠĠĠĠĠ Ġval Ġlast Lines Ġ= Ġif Ġ( is Same ) ĠlistOf () Ġelse ĠlistOf (" remaining Ġelements Ġskipped ") ĊĠĠĠĠĠĠĠ Ġreturn ĠD ifference ( is Same , ĠlistOf ( first Line ) Ġ+ Ġmessage Lines Ġ+ Ġlast Lines ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcompare ( a Caption : ĠString , Ġa : ĠString , Ġb Caption : ĠString , Ġb : ĠString ): ĠD ifference Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompare ( a Caption , Ġa . to Lines (), Ġb Caption , Ġb . to Lines ()) ĊĊĠĠĠ Ġfun Ġcompare ( a : ĠString , Ġb : ĠString ): ĠD ifference Ġ= Ġcompare (" a ", Ġa , Ġ" b ", Ġb ) ĊĊĠĠĠ Ġprivate Ġfun ĠString . to Lines (): ĠList < String > Ġ= Ġthis . split ("\ r \ n ", Ġ"\ r ", Ġ"\ n ") ĊĊĠĠĠ Ġdata Ġclass ĠD ifference ( val Ġis Same : ĠBoolean , Ġval Ġmessage Lines : ĠList < String >) Ċ } Ċ