/* Ċ Ġ* ĠThis Ġfile Ġis Ġpart Ġof ĠM CP IDE , Ġlicensed Ġunder Ġthe ĠMIT ĠLicense Ġ( MIT ). Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġk en zier ocks Ġ< https :// ken zier ocks . me > Ċ Ġ* ĠCopyright Ġ( c ) Ġcontributors Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġme . ken zier ocks . m cp ide . util Ċ Ċ import Ġde . sk uzzle . semantic . Version Ċ import Ġmu . Kotlin Logging Ċ Ċ data Ġclass ĠParsed Version ( ĊĠĠĠ Ġval Ġversion : ĠVersion ?, ĊĠĠĠ Ġval Ġsub Version : ĠVersion ?, ĊĠĠĠ Ġval Ġoriginal : ĠString Ċ ) Ċ Ċ private Ġval Ġlogger Ġ= ĠKotlin Logging . logger Ġ{ Ġ} Ċ Ċ private Ġfun Ġfix Version ( version : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġval Ġparts Ġ= Ġversion . split ('. '). map Ġ{ Ġp Ġ-> Ġp . trim Start Ġ{ Ġit Ġ== Ġ' 0 ' Ġ} Ġ} ĊĠĠĠ Ġreturn Ġwhen Ġ( parts . size ) Ġ{ ĊĠĠĠĠĠĠĠĠ 1 Ġ-> Ġparts Ġ+ ĠlistOf (" 0 ", Ġ" 0 ") ĊĠĠĠĠĠĠĠĠ 2 Ġ-> Ġparts Ġ+ ĠlistOf (" 0 ") ĊĠĠĠĠĠĠĠĠ 3 Ġ-> Ġparts ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġjoin Ġthe Ġlast Ġdots Ġas Ġpart Ġof Ġthe Ġpatch Ġversion ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparts . sub List ( 0 , Ġ 2 ) Ġ+ Ġparts . sub List ( 2 , Ġparts . size ). join ToString ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. join ToString (".") Ċ } Ċ Ċ private Ġfun Ġtry Parse Version ( version : ĠString ): ĠVersion ? Ġ{ ĊĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠ ĠVersion . parse Version ( version ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠVersion . Version FormatException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info ( e ) Ġ{ Ġ" Failed Ġto Ġparse Ġ$ version " Ġ} ĊĠĠĠĠĠĠĠ Ġnull ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġparse Version Safe ( version : ĠString ): ĠParsed Version Ġ{ ĊĠĠĠ Ġval Ġparts Ġ= Ġversion . split ('- ', Ġlimit Ġ= Ġ 2 ) ĊĠĠĠ Ġval Ġbase Version Ġ= Ġfix Version ( parts [ 0 ]) ĊĠĠĠ Ġval Ġsub Version Ġ= Ġparts . elementAt OrNull ( 1 )?. let Ġ{ Ġfix Version ( it ) Ġ} ĊĠĠĠ Ġreturn ĠParsed Version ( ĊĠĠĠĠĠĠĠ Ġtry Parse Version ( base Version ), ĊĠĠĠĠĠĠĠ Ġsub Version ?. let Ġ{ Ġtry Parse Version ( it ) Ġ}, ĊĠĠĠĠĠĠĠ Ġversion ĊĠĠĠ Ġ) Ċ } Ċ Ċ private Ġval ĠCOMP AR ATOR Ġ= Ġcompare By < Parsed Version , ĠVersion ? >( null s First ()) Ġ{ ĊĠĠĠ Ġit . version Ċ }. then By ( null s First ()) Ġ{ Ġit . sub Version Ġ} Ċ Ċ fun ĠList < String >. sorted ByVersion (): ĠList < String > Ġ{ ĊĠĠĠ Ġreturn Ġmap Ġ{ Ġparse Version Safe ( it ) Ġ}. sorted With ( COMP AR ATOR ). map Ġ{ Ġit . original Ġ} Ċ }