package Ġme . arch in amon . i 1 8 n Ċ Ċ object ĠI 1 8 n Validator Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcur ly Tag Pattern Ġ= ĠRegex ("\\ { .*? }") ĊĠĠĠ Ġprivate Ġval Ġhtml Tag Pattern Ġ= ĠRegex ("</ ? .* ?> ") ĊĠĠĠ Ġprivate Ġval Ġnew Line Pattern Ġ= ĠRegex ("\\ n ") ĊĠĠĠ Ġprivate Ġval Ġunicode Pattern Ġ= ĠRegex ("( \\\\ u ) ([ A - F 0 - 9 ]{ 4 }) ") ĊĊĠĠĠ Ġprivate Ġval Ġchecks Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠ Ġcur ly Tag Pattern Ġto ĠPro blems :: bad Tags , ĊĠĠĠĠĠĠĠ Ġhtml Tag Pattern Ġto ĠPro blems :: bad Html , ĊĠĠĠĠĠĠĠ Ġnew Line Pattern Ġto ĠPro blems :: broken Controls , ĊĠĠĠĠĠĠĠ Ġunicode Pattern Ġto ĠPro blems :: bad Unicode ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġfun Ġprocess ( input : ĠList < Language >, Ġbaseline : ĠLanguage ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinput ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . code Ġ!= Ġbaseline . code Ġ} Ġ// Ġdo Ġnot Ġcheck Ġbase Ġlang Ġagainst Ġitself ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġlang Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlang Ġagainst Ġbaseline ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġin fix Ġfun ĠLanguage . again st ( baseline : ĠLanguage ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . items . size Ġ!= Ġbaseline . items . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Baseline Ġlanguage Ġand Ġ$ code Ġhas Ġdifferent Ġcount Ġof Ġstring Ġkeys !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Different Ġkeys Ġare : Ġ${ this . items . diff ( baseline . items ). join ToString Ġ{ Ġit . key Ġ}} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbaseline . items . forEach Indexed Ġ{ Ġindex , Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġrun Checks Again st Ġthis . items [ index ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġin fix Ġfun ĠString Item . run Checks Again st ( item ToCheck : ĠString Item ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproblems Ġ= Ġitem ToCheck . problems ĊĊĠĠĠĠĠĠĠ Ġchecks . forEach Ġchecker @{ Ġ( check , Ġfunctor ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl value Matcher Ġ= ĠString Matcher ( check , Ġthis . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr value Matcher Ġ= ĠString Matcher ( check , Ġitem ToCheck . value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl value Has Arg Ġ= Ġl value Matcher . has Args () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr value Has Arg Ġ= Ġr value Matcher . has Args () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! l value Has Arg Ġxor Ġ! r value Has Arg ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproblems . args Not Match Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ checker ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! l value Has Arg Ġ&& Ġ! r value Has Arg ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ checker ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġl value Args Count Ġ= Ġl value Matcher . get Args Count () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr value Args Count Ġ= Ġr value Matcher . get Args Count () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( l value Args Count Ġxor Ġr value Args Count Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunctor . set ( problems , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ checker ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġl value Args Count ). forEach Ġ{ Ġidx Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargs Default Ġ= Ġl value Matcher . getSelected Arg ( idx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! r value Matcher . has Arg Occurrence ( args Default )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfunctor . set ( problems , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ checker ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }