package Ġkt find Ċ Ċ import Ġorg . json . simple . JSONArray Ċ import Ġorg . json . simple . JSONObject Ċ import Ġorg . json . simple . JSON Value Ċ import Ġorg . json . simple . parser . JSONParser Ċ import Ġorg . json . simple . parser . ParseException Ċ import Ġjava . io . File Ċ import Ġjava . io . FileNotFoundException Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Reader Ċ Ċ /** Ċ Ġ* Ġ@ author Ġc ary Ġon Ġ 7 / 2 3 / 1 6 . Ċ Ġ*/ Ċ data Ġclass ĠFind Option ( val Ġshort arg : ĠString ?, Ġval Ġlong arg : ĠString , Ġval Ġdesc : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġsort arg Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( short arg Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlong arg . lowercase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshort arg . lowercase () Ġ+ Ġ"@ " Ġ+ Ġlong arg . lowercase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ class ĠFind Options Ġ{ ĊĠĠĠ Ġprivate Ġval Ġfind Options Ġ: ĠList < Find Option > ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Options Ġ= Ġload Find Options FromJson () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Find Options FromJson () Ġ: ĠList < Find Option > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfind Options Json Path Ġ= Ġ"/ find options . json " ĊĠĠĠĠĠĠĠ Ġval Ġfind Options InputStream Ġ= Ġjava Class . getResource AsStream ( find Options Json Path ) ĊĠĠĠĠĠĠĠ Ġval Ġobj : ĠAny Ġ= ĠJSON Parser (). parse ( InputStream Reader ( find Options InputStream )) ĊĠĠĠĠĠĠĠ Ġval Ġjson Obj Ġ= Ġobj Ġas ĠJSONObject ĊĠĠĠĠĠĠĠ Ġval Ġfind options Array Ġ= Ġjson Obj [" find options "] Ġas ĠJSONArray ĊĊĠĠĠĠĠĠĠ Ġval Ġoptions Ġ: ĠMutable List < Find Option > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġfor Ġ( o Ġin Ġfind options Array ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfind option Map Ġ= Ġo Ġas ĠMap < String , ĠString > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlong Arg Ġ= Ġfind option Map [" long "] Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdesc Ġ= Ġfind option Map [" desc "] Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġshort Arg : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( find option Map . containsKey (" short ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshort Arg Ġ= Ġfind option Map [" short "] Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions . add ( Find Option ( short Arg , Ġlong Arg , Ġdesc )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġoptions . toList (). sorted By Ġ{ Ġit . sort arg Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Arg Map () Ġ: ĠMap < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlong Opts Ġ= Ġfind Options . map Ġ{ ĠPair ( it . long arg , Ġit . long arg ) Ġ}. toMap () ĊĠĠĠĠĠĠĠ Ġval Ġshort Opts Ġ= Ġfind Options . filter Ġ{ Ġit . short arg Ġ!= Ġnull Ġ}. map Ġ{ ĠPair ( it . short arg !! , Ġit . long arg ) Ġ}. toMap () ĊĠĠĠĠĠĠĠ Ġreturn Ġlong Opts . plus ( short Opts ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġarg Action Map : ĠMap < String , Ġ(( String , ĠFind Settings ) Ġ-> ĠFind Settings )> Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" in - archive ext " Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġs , Ġss Ġ-> Ġss . copy ( in Archive Extensions Ġ= Ġadd Extensions ( s , Ġss . in Archive Extensions )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" in - archive file pattern " Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġs , Ġss Ġ-> Ġss . copy ( in Archive File Patterns Ġ= Ġss . in Archive File Patterns . plus ( Regex ( s ))) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" in - dir pattern " Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġs , Ġss Ġ-> Ġss . copy ( in Dir Patterns Ġ= Ġss . in Dir Patterns . plus ( Regex ( s ))) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" in - ext " Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġs , Ġss Ġ-> Ġss . copy ( in Extensions Ġ= Ġadd Extensions ( s , Ġss . in Extensions )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" in - file pattern " Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġs , Ġss Ġ-> Ġss . copy ( in File Patterns Ġ= Ġss . in File Patterns . plus ( Regex ( s ))) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" in - file type " Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġs , Ġss Ġ-> Ġss . copy ( in File Types Ġ= Ġadd File Types ( s , Ġss . in File Types )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" out - archive ext " Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġs , Ġss Ġ-> Ġss . copy ( out Archive Extensions Ġ= Ġadd Extensions ( s , Ġss . out Archive Extensions )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" out - archive file pattern " Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġs , Ġss Ġ-> Ġss . copy ( out Archive File Patterns Ġ= Ġss . out Archive File Patterns . plus ( Regex ( s ))) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" out - dir pattern " Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġs , Ġss Ġ-> Ġss . copy ( out Dir Patterns Ġ= Ġss . out Dir Patterns . plus ( Regex ( s ))) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" out - ext " Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġs , Ġss Ġ-> Ġss . copy ( out Extensions Ġ= Ġadd Extensions ( s , Ġss . out Extensions )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" out - file pattern " Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġs , Ġss Ġ-> Ġss . copy ( out File Patterns Ġ= Ġss . out File Patterns . plus ( Regex ( s ))) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" out - file type " Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġs , Ġss Ġ-> Ġss . copy ( out File Types Ġ= Ġadd File Types ( s , Ġss . out File Types )) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" settings - file " Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġs , Ġss Ġ-> Ġsettings FromFile ( s , Ġss ) Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġbool Flag Action Map : ĠMap < String , Ġ(( Boolean , ĠFind Settings ) Ġ-> ĠFind Settings )> Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" archives only " Ġto Ġ{ Ġb , Ġss Ġ-> Ġif Ġ( b ) Ġss . copy ( archives Only Ġ= Ġb , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinclude Arch ives Ġ= Ġb ) Ġelse Ġss . copy ( archives Only Ġ= Ġb ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" debug " Ġto Ġ{ Ġb , Ġss Ġ-> Ġif Ġ( b ) Ġss . copy ( debug Ġ= Ġb , Ġverbose Ġ= Ġb ) Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġss . copy ( debug Ġ= Ġb ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" exclude archives " Ġto Ġ{ Ġb , Ġss Ġ-> Ġss . copy ( include Arch ives Ġ= Ġ! b ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" exclude hidden " Ġto Ġ{ Ġb , Ġss Ġ-> Ġss . copy ( exclude Hidden Ġ= Ġb ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" help " Ġto Ġ{ Ġb , Ġss Ġ-> Ġss . copy ( print Usage Ġ= Ġb ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" include hidden " Ġto Ġ{ Ġb , Ġss Ġ-> Ġss . copy ( exclude Hidden Ġ= Ġ! b ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" list dirs " Ġto Ġ{ Ġb , Ġss Ġ-> Ġss . copy ( list Dirs Ġ= Ġb ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" list files " Ġto Ġ{ Ġb , Ġss Ġ-> Ġss . copy ( list Files Ġ= Ġb ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" nore cursive " Ġto Ġ{ Ġb , Ġss Ġ-> Ġss . copy ( recursive Ġ= Ġ! b ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" recursive " Ġto Ġ{ Ġb , Ġss Ġ-> Ġss . copy ( recursive Ġ= Ġb ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" include archives " Ġto Ġ{ Ġb , Ġss Ġ-> Ġss . copy ( include Arch ives Ġ= Ġb ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" verbose " Ġto Ġ{ Ġb , Ġss Ġ-> Ġss . copy ( verbose Ġ= Ġb ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" version " Ġto Ġ{ Ġb , Ġss Ġ-> Ġss . copy ( print Version Ġ= Ġb ) Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġsettings FromFile ( filePath : ĠString , Ġsettings : ĠFind Settings ) Ġ: ĠFind Settings Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( filePath ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= Ġfile . read Text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsettings FromJson ( json , Ġsettings ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFind Exception (" Settings Ġfile Ġnot Ġfound : Ġ$ filePath ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFind Exception (" IOException Ġreading Ġsettings Ġfile : Ġ$ filePath ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠParseException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFind Exception (" ParseException Ġtrying Ġto Ġparse Ġthe ĠJSON Ġin Ġ$ filePath ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsettings FromJson ( json : ĠString , Ġsettings : ĠFind Settings ): ĠFind Settings Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠJSON Value . parse With Exception ( json ) ĊĠĠĠĠĠĠĠ Ġval ĠjsonObject Ġ= Ġobj Ġas ĠJSONObject ĊĠĠĠĠĠĠĠ Ġfun Ġrec Settings FromJson ( keys : ĠList < Any ? >, Ġsettings : ĠFind Settings ) Ġ: ĠFind Settings Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( keys . isEmpty ()) Ġsettings ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġko Ġ= Ġkeys . first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvo Ġ= ĠjsonObject [ ko ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ko Ġ!= Ġnull Ġ&& Ġko Ġis ĠString Ġ&& Ġvo Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrec Settings FromJson ( keys . drop ( 1 ), Ġapply Setting ( ko , Ġvo , Ġsettings )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrec Settings FromJson ( keys . drop ( 1 ), Ġsettings ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġrec Settings FromJson ( obj . keys . toList (), Ġsettings ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġapply Setting ( key : ĠString , Ġobj : ĠAny , Ġsettings : ĠFind Settings ): ĠFind Settings Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( obj ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġapply Setting ( key , Ġobj , Ġsettings ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠBoolean Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġapply Setting ( key , Ġobj , Ġsettings ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLong Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġapply Setting ( key , Ġobj . toString (), Ġsettings ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠJSONArray Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġapply Setting ( key , Ġobj . toList (). map Ġ{ Ġit Ġas ĠString Ġ}, Ġsettings ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsettings ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġapply Setting ( key : ĠString , Ġs : ĠString , Ġsettings : ĠFind Settings ): ĠFind Settings Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . arg Action Map . containsKey ( key ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . arg Action Map [ key ] !!. invoke ( s , Ġsettings ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ== Ġ" path " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings . copy ( paths Ġ= Ġsettings . paths . plus ( s )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFind Exception (" Invalid Ġoption : Ġ$ key ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġapply Setting ( key : ĠString , Ġbool : ĠBoolean , Ġsettings : ĠFind Settings ): ĠFind Settings Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . bool Flag Action Map . containsKey ( key )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis . bool Flag Action Map [ key ] !!. invoke ( bool , Ġsettings ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFind Exception (" Invalid Ġoption : Ġ$ key ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġapply Setting ( key : ĠString , Ġlst : ĠList < String >, Ġsettings : ĠFind Settings ): ĠFind Settings Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( lst . isEmpty ()) Ġsettings ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply Setting ( key , Ġlst . drop ( 1 ), Ġapply Setting ( key , Ġlst . first (), Ġsettings )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsettings From Args ( args Ġ: ĠArray < String >) Ġ: ĠFind Settings Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġarg Map Ġ= Ġget Arg Map () ĊĠĠĠĠĠĠĠ Ġfun Ġrec Settings From Args ( args : ĠList < String >, Ġsettings : ĠFind Settings ) Ġ: ĠFind Settings Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( args . isEmpty ()) Ġreturn Ġsettings ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Arg Ġ= Ġargs . first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( next Arg . startsWith ("- ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarg Ġ= Ġnext Arg . drop While Ġ{ Ġit Ġ== Ġ'-' Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( arg Map . containsKey ( arg )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlong Arg Ġ= Ġarg Map [ arg ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( arg Action Map . containsKey ( long Arg )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( args . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarg Val Ġ= Ġargs . drop ( 1 ). first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġss Ġ= Ġarg Action Map [ long Arg ] !!. invoke ( arg Val , Ġsettings ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrec Settings From Args ( args . drop ( 2 ), Ġss ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFind Exception (" Missing Ġvalue Ġfor Ġoption Ġ$ arg ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( bool Flag Action Map . containsKey ( long Arg )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġss Ġ= Ġbool Flag Action Map [ long Arg ] !!. invoke ( true , Ġsettings ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrec Settings From Args ( args . drop ( 1 ), Ġss ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFind Exception (" Invalid Ġoption : Ġ$ arg ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠFind Exception (" Invalid Ġoption : Ġ$ arg ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġrec Settings From Args ( args . drop ( 1 ), Ġsettings . copy ( paths Ġ= Ġsettings . paths . plus ( next Arg ))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ// Ġdefault Ġlist Files Ġto Ġtrue Ġsince Ġrunning Ġas Ġcli ĊĠĠĠĠĠ Ġreturn Ġrec Settings From Args ( args . toList (), ĠgetDefault Settings (). copy ( list Files Ġ= Ġtrue )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġusage () Ġ{ ĊĠĠĠĠĠĠĠ Ġlog ( get Usage String ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Usage String () Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġsb . append (" Usage :\ n ") ĊĠĠĠĠĠĠĠ Ġsb . append (" Ġkt find Ġ[ options ] Ġ< path > Ġ[< path > Ġ... ]\ n \ n ") ĊĠĠĠĠĠĠĠ Ġsb . append (" Options :\ n ") ĊĠĠĠĠĠĠĠ Ġfun Ġget Opt String ( so : ĠFind Option ): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ( if Ġ( so . short arg Ġ== Ġnull ) Ġ"" Ġelse Ġ"- ${ so . short arg }, ") Ġ+ Ġ"-- ${ so . long arg }" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġopt Pairs Ġ= Ġfind Options . map Ġ{ ĠPair ( get Opt String ( it ), Ġit . desc ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġlongest Ġ= Ġopt Pairs . map Ġ{ Ġit . first . length Ġ}. max OrNull () ĊĠĠĠĠĠĠĠ Ġval Ġformat Ġ= Ġ" Ġ% 1 ${ '$ '} -${ longest } s Ġ Ġ% 2 ${ '$ '} s \ n " ĊĠĠĠĠĠĠĠ Ġfor Ġ( o Ġin Ġopt Pairs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( String . format ( format , Ġo . first , Ġo . second )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsb . toString () ĊĠĠĠ Ġ} Ċ } Ċ