package Ġcom . github . nv wa . cli 4 kotlin Ċ Ċ import Ġcom . github . nv wa . cli 4 kotlin . exception .* Ċ import Ġcom . github . nv wa . cli 4 kotlin . option .* Ċ import Ġcom . sun . xml . internal . fast info set . util . String Array Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġåĳ½ä»¤ Ċ Ġ* Ċ Ġ* Ġ@ param Ġname Ġåĳ½ä»¤ åĲįç§° Ċ Ġ* Ġ@ param Ġdesc Ġåĳ½ä»¤ æııè¿° ä¿¡æģ¯ Ċ Ġ*/ Ċ open Ġclass ĠCommand ( private Ġval Ġname : ĠString , Ġprivate Ġval Ġdesc : ĠString ) Ġ{ ĊĊĠ Ġ// Ġ éĢīé¡¹ ĊĠ Ġprivate Ġval Ġoptions Ġ= ĠHashMap < String , ĠOption < *> >( 1 0 ) ĊĠ Ġ// Ġ å¿ħé¡» éĢīé¡¹ ĊĠ Ġprivate Ġval Ġrequired Ġ= ĠHashMap < String , ĠOption < *> >( 1 0 ) ĊĠ Ġ// Ġ éĢīé¡¹ åĢ¼ ĊĠ Ġprivate Ġvar Ġvalues Ġ= ĠHashMap < String , ĠOption < *> >( 1 0 ) ĊĠ Ġ// Ġ éĢīé¡¹ å¸®åĬ© ä¿¡æģ¯ ĊĠ Ġprivate Ġvar Ġhelp Ġ= ĠString Array ( 1 , Ġ 1 0 , Ġtrue ) ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġæ·»åĬł åĳ½ä»¤ éĢīé¡¹ ãĢĤ æ·»åĬł éĢīé¡¹ æł¼å¼ı ãĢģ å¸®åĬ© ä¿¡æģ¯ ä»¥åıĬ å¿ħé¡» é¡¹ ãĢĤ ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġoption Ġ éĢīé¡¹ ĊĠĠ Ġ* Ġ@ return Ġå½ĵåīį åĳ½åĲį ĊĠĠ Ġ*/ ĊĠ Ġfun Ġ< T > Ġadd Option ( option : ĠOption < T >): ĠCommand Ġ{ ĊĊĠĠĠ Ġ// Ġ ç¼ĵåŃĺ çŁŃ æł¼å¼ı éĢīé¡¹ ĊĠĠĠ Ġif Ġ( option . short Form Ġ!= Ġnull ) ĊĠĠĠĠĠ Ġoptions [" -" Ġ+ Ġoption . short Form ] Ġ= Ġoption ĊĊĠĠĠ Ġ// Ġ ç¼ĵåŃĺ éĢīé¡¹ å¸®åĬ© ä¿¡æģ¯ ĊĠĠĠ Ġif Ġ(! options . containsKey ( option . long Form )) Ġ{ ĊĠĠĠĠĠ Ġval Ġhelp Desc Ġ= Ġoption . get Help () ĊĠĠĠĠĠ Ġif Ġ( help Desc Ġ!= Ġnull ) Ġhelp . add ( help Desc ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ ç¼ĵåŃĺ å¿ħé¡» éĢīé¡¹ ĊĠĠĠ Ġif Ġ( option . isRequired Ġ&& Ġ! required . containsKey ( option . long Form )) ĊĠĠĠĠĠ Ġrequired [ option . long Form ] Ġ= Ġoption ĊĊĠĠĠ Ġ// Ġ ç¼ĵåŃĺ éķ¿ æł¼å¼ı éĢīé¡¹ ï¼Ī å¿ħé¡» åŃĺåľ¨ ï¼ī ĊĠĠĠ Ġoptions [" -- " Ġ+ Ġoption . long Form ] Ġ= Ġoption ĊĊĠĠĠ Ġreturn Ġthis ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġæ·»åĬł åıĤæķ° åĢ¼ ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġoption Ġ éĢīé¡¹ ĊĠĠ Ġ* Ġ@ param Ġvalue Arg Ġ åĢ¼ åıĤæķ° ĊĠĠ Ġ*/ ĊĠ Ġ@ Throws ( Illegal Option Value Exception :: class ) ĊĠ Ġprivate Ġfun Ġ< T > Ġadd Value ( option : ĠOption < T >, Ġvalue Arg : ĠString ) Ġ{ ĊĠĠĠ Ġoption . setValue ( value Arg ) ĊĠĠĠ Ġ// Ġif Ġ( values . containsKey ( option . long Form )) Ġvalues . remove ( option . long Form ) ĊĠĠĠ Ġvalues [ option . long Form ] Ġ= Ġoption ĊĠ Ġ} ĊĊĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠ Ġprivate Ġfun Ġ< T > ĠgetValue ( option : ĠOption < T >, Ġdefault : ĠT ? Ġ= Ġnull ): ĠT ? Ġ{ ĊĠĠĠ Ġval Ġfound Ġ= Ġvalues [ option . long Form ] ĊĠĠĠ Ġreturn Ġif Ġ( found Ġ== Ġnull ) Ġdefault Ġelse Ġ( found . getValue () Ġas ĠT ) Ġ?: Ġdefault ĊĠ Ġ} ĊĊĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠ Ġprivate Ġfun Ġ< T > ĠgetValue ( short Name : ĠChar , Ġdefault : ĠT ? Ġ= Ġnull ): ĠT ? Ġ{ ĊĠĠĠ Ġval Ġoption Ġ= Ġoptions [" -" Ġ+ Ġshort Name . toString ()] Ġas ĠOption < T >? ĊĠĠĠ Ġreturn Ġif Ġ( option Ġ== Ġnull ) Ġnull Ġelse ĠgetValue ( option , Ġdefault ) ĊĠ Ġ} ĊĊĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠ Ġprivate Ġfun Ġ< T > ĠgetValue ( long Name : ĠString , Ġdefault : ĠT ? Ġ= Ġnull ): ĠT ? Ġ{ ĊĠĠĠ Ġval Ġoption Ġ= Ġoptions [" -- $ long Name "] Ġas ĠOption < T >? ĊĠĠĠ Ġreturn Ġif Ġ( option Ġ== Ġnull ) Ġnull Ġelse ĠgetValue ( option , Ġdefault ) ĊĠ Ġ} ĊĊĠ Ġ// Ġæ·»åĬł ä¸įåĲĮ ç±»åŀĭçļĦ éĢīé¡¹ ĊĊĠ Ġfun Ġadd String Option ( ĊĠĠĠĠĠ Ġlong Form : ĠString , ĊĠĠĠĠĠ Ġis Required : ĠBoolean , ĊĠĠĠĠĠ Ġshort Form : ĠChar ? Ġ= Ġnull , ĊĠĠĠĠĠ Ġhelp : ĠString ? Ġ= Ġnull ĊĠ Ġ): ĠCommand Ġ= Ġadd Option ( String Option ( long Form , Ġis Required , Ġshort Form , Ġhelp )) ĊĊĠ Ġfun Ġadd Integer Option ( ĊĠĠĠĠĠ Ġlong Form : ĠString , ĊĠĠĠĠĠ Ġis Required : ĠBoolean , ĊĠĠĠĠĠ Ġshort Form : ĠChar ? Ġ= Ġnull , ĊĠĠĠĠĠ Ġhelp : ĠString ? Ġ= Ġnull ĊĠ Ġ): ĠCommand Ġ= Ġadd Option ( Integer Option ( long Form , Ġis Required , Ġshort Form , Ġhelp )) ĊĊĠ Ġfun Ġadd Long Option ( ĊĠĠĠĠĠ Ġlong Form : ĠString , ĊĠĠĠĠĠ Ġis Required : ĠBoolean , ĊĠĠĠĠĠ Ġshort Form : ĠChar ? Ġ= Ġnull , ĊĠĠĠĠĠ Ġhelp : ĠString ? Ġ= Ġnull ĊĠ Ġ): ĠCommand Ġ= Ġadd Option ( Long Option ( long Form , Ġis Required , Ġshort Form , Ġhelp )) ĊĊĠ Ġfun Ġadd Double Option ( ĊĠĠĠĠĠ Ġlong Form : ĠString , ĊĠĠĠĠĠ Ġis Required : ĠBoolean , ĊĠĠĠĠĠ Ġshort Form : ĠChar ? Ġ= Ġnull , ĊĠĠĠĠĠ Ġhelp : ĠString ? Ġ= Ġnull ĊĠ Ġ): ĠCommand Ġ= Ġadd Option ( Double Option ( long Form , Ġis Required , Ġshort Form , Ġhelp )) ĊĊĠ Ġfun Ġadd Boolean Option ( ĊĠĠĠĠĠ Ġlong Form : ĠString , ĊĠĠĠĠĠ Ġis Required : ĠBoolean , ĊĠĠĠĠĠ Ġshort Form : ĠChar ? Ġ= Ġnull , ĊĠĠĠĠĠ Ġhelp : ĠString ? Ġ= Ġnull ĊĠ Ġ): ĠCommand Ġ= Ġadd Option ( Boolean Option ( long Form , Ġis Required , Ġshort Form , Ġhelp )) ĊĊĠ Ġ// Ġèİ·åıĸ ä¸įåĲĮ ç±»åŀĭ éĢīé¡¹ åĢ¼ ĊĊĠ Ġfun Ġget StringValue ( ĊĠĠĠĠĠ Ġlong Form : ĠString , ĊĠĠĠĠĠ Ġdefault : ĠString ? Ġ= Ġnull ĊĠ Ġ): ĠString ? Ġ= ĠgetValue ( long Form , Ġdefault ) ĊĊĠ Ġfun Ġget StringValue ( ĊĠĠĠĠĠ Ġshort Form : ĠChar , ĊĠĠĠĠĠ Ġdefault : ĠString ? Ġ= Ġnull ĊĠ Ġ): ĠString ? Ġ= ĠgetValue ( short Form , Ġdefault ) ĊĊĠ Ġfun Ġget Integer Value ( ĊĠĠĠĠĠ Ġlong Form : ĠString , ĊĠĠĠĠĠ Ġdefault : ĠInt ? Ġ= Ġnull ĊĠ Ġ): ĠInt ? Ġ= ĠgetValue ( long Form , Ġdefault ) ĊĊĠ Ġfun Ġget Integer Value ( ĊĠĠĠĠĠ Ġshort Form : ĠChar , ĊĠĠĠĠĠ Ġdefault : ĠInt ? Ġ= Ġnull ĊĠ Ġ): ĠInt ? Ġ= ĠgetValue ( short Form , Ġdefault ) ĊĊĠ Ġfun Ġget Long Value ( ĊĠĠĠĠĠ Ġlong Form : ĠString , ĊĠĠĠĠĠ Ġdefault : ĠLong ? Ġ= Ġnull ĊĠ Ġ): ĠLong ? Ġ= ĠgetValue ( long Form , Ġdefault ) ĊĊĠ Ġfun Ġget Long Value ( ĊĠĠĠĠĠ Ġshort Form : ĠChar , ĊĠĠĠĠĠ Ġdefault : ĠLong ? Ġ= Ġnull ĊĠ Ġ): ĠLong ? Ġ= ĠgetValue ( short Form , Ġdefault ) ĊĊĠ Ġfun Ġget Double Value ( ĊĠĠĠĠĠ Ġlong Form : ĠString , ĊĠĠĠĠĠ Ġdefault : ĠDouble ? Ġ= Ġnull ĊĠ Ġ): ĠDouble ? Ġ= ĠgetValue ( long Form , Ġdefault ) ĊĊĠ Ġfun Ġget Double Value ( ĊĠĠĠĠĠ Ġshort Form : ĠChar , ĊĠĠĠĠĠ Ġdefault : ĠDouble ? Ġ= Ġnull ĊĠ Ġ): ĠDouble ? Ġ= ĠgetValue ( short Form , Ġdefault ) ĊĊĠ Ġfun Ġget Boolean Value ( ĊĠĠĠĠĠ Ġlong Form : ĠString , ĊĠĠĠĠĠ Ġdefault : ĠBoolean ? Ġ= Ġnull ĊĠ Ġ): ĠBoolean ? Ġ= ĠgetValue ( long Form , Ġdefault ) ĊĊĠ Ġfun Ġget Boolean Value ( ĊĠĠĠĠĠ Ġshort Form : ĠChar , ĊĠĠĠĠĠ Ġdefault : ĠBoolean ? Ġ= Ġnull ĊĠ Ġ): ĠBoolean ? Ġ= ĠgetValue ( short Form , Ġdefault ) ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ è§£æŀĲ åĳ½ä»¤ è¡Į åıĤæķ° ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġargs Ġ å¾ħ è§£æŀĲ åıĤæķ° è¡¨ ĊĠĠ Ġ*/ ĊĠ Ġ@ Throws ( Unknown Option Exception :: class , ĊĠĠĠĠĠ ĠIllegal Option Value Exception :: class , ĊĠĠĠĠĠ ĠUnknown Sub Option Exception :: class , ĊĠĠĠĠĠ ĠNot Flag Exception :: class , ĊĠĠĠĠĠ ĠRequired Option Exception :: class ) ĊĠ Ġfun Ġparse ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġvar Ġposition Ġ= Ġ 0 ĊĊĠĠĠ Ġwhile Ġ( position Ġ< Ġargs . size ) Ġ{ ĊĠĠĠĠĠ Ġ// Ġ ä¼łåħ¥ éĢīé¡¹ åĲį ĊĠĠĠĠĠ Ġvar Ġarg Ġ= Ġargs [ position ] ĊĊĠĠĠĠĠ Ġif Ġ( arg . startsWith ("- ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( arg Ġ== Ġ"-- ") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegal Option FormatException ( arg ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( arg . startsWith ("-- ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¤ĦçĲĨ éķ¿ æł¼å¼ı éĢīé¡¹ ĊĠĠĠĠĠĠĠĠĠ Ġhandle Long Option ( arg ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( arg . startsWith ("- ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġ ä¼łåħ¥ éĢīé¡¹ åĢ¼ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġnext Ġ= Ġif Ġ( position Ġ< Ġargs . size Ġ- Ġ 1 ) Ġargs [++ position ] Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠ Ġ// Ġarg . length ä¿Ŀè¯ģ æĺ¯ çŁŃ æł¼å¼ı éĢīé¡¹ ï¼Į next ä¿Ŀè¯ģ éĢīé¡¹ åĢ¼ åŃĺåľ¨ ä¸Ķ åĲĪ æ³ķ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( arg . length Ġ== Ġ 2 Ġ&& Ġnext Ġ!= Ġnull Ġ&& Ġ! next . startsWith ("- ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¤ĦçĲĨ çŁŃ æł¼å¼ı åıĤæķ° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Short Option ( arg , Ġnext ) ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¤ĦçĲĨ æĹł éĢīé¡¹ åĢ¼ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Flags ( arg ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġposition ++ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfor Ġ(( _: ĠString , Ġoption : ĠOption <* >) Ġin Ġrequired ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ(! values . containsKey ( option . long Form )) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠRequired Option Exception ( option ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ å¤ĦçĲĨ éķ¿ æł¼å¼ı åıĤæķ° åĢ¼ ĊĠĠ Ġ* Ġ< p > ĊĠĠ Ġ* Ġ ä¾ĭå¦Ĥ ï¼ļ< code >-- size = 1 0 </ code > ĊĠĠ Ġ* Ġ</ p > ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġhandle Long Option ( line : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġindex Ġ= Ġline . indexOf (" =") ĊĠĠĠ Ġvar Ġkey : ĠString ? ĊĠĠĠ Ġvar Ġvalue : ĠString ? ĊĠĠĠ Ġif Ġ( index Ġ!= Ġ- 1 ) Ġ{ ĊĠĠĠĠĠ Ġ// Ġ"-- " ä¸İ " =" ä¹ĭéĹ´ çļĦæĺ¯ éĢīé¡¹ åĲį ĊĠĠĠĠĠ Ġkey Ġ= Ġline . substring ( 2 , Ġindex ) ĊĠĠĠĠĠ Ġ// Ġ"=" åĲİ çļĦæĺ¯ éĢīé¡¹ åĢ¼ ĊĠĠĠĠĠ Ġvalue Ġ= Ġline . substring ( index Ġ+ Ġ 1 ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġkey Ġ= Ġline . substring ( 2 ) ĊĠĠĠĠĠ Ġvalue Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġoption Ġ= Ġoptions [" -- $ key "] ĊĠĠĠ Ġif Ġ( option Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠUnknown Option Exception ( key ) ĊĠĠĠ Ġ} Ġelse Ġif Ġ( option . with Value Ġ&& Ġvalue Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġadd Value ( option , Ġvalue ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġ// Ġ éĢīé¡¹ æ²¡æľī with Value éľĢè¦ģ ï¼Į åį³ ä½¿ ä¼łåħ¥ åĢ¼ ä¹Ł ä¸į ä½¿çĶ¨ ĊĠĠĠĠĠ Ġadd Value ( option , Ġ"") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ å¤ĦçĲĨ çŁŃ æł¼å¼ı åıĤæķ° åĢ¼ ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġhandle Short Option ( key : ĠString , Ġvalue : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġoption Ġ= Ġoptions [ key ] ĊĠĠĠ Ġif Ġ( option Ġ== Ġnull ) Ġthrow ĠUnknown Option Exception ( key . substring ( 1 )) ĊĠĠĠ Ġelse Ġthis . add Value ( option , Ġvalue ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġ å¤ĦçĲĨ çŁŃ æł¼å¼ı åıĤæķ° ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġhandle Flags ( line : ĠString ) Ġ{ ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġline . length ) Ġ{ ĊĠĠĠĠĠ Ġval Ġoption Ġ= Ġoptions [" -" Ġ+ Ġline [ i ]. toString ()] ĊĠĠĠĠĠ Ġif Ġ( option Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠUnknown Sub Option Exception ( line , Ġline [ i ]) ĊĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( option . with Value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠNot Flag Exception ( line , Ġoption ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġadd Value ( option , Ġ"") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġè¿ĶåĽŀ ä¹ł æĥ ¯ çĶ¨ æ³ķ ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ return Ġæ ĥ ¯ çĶ¨ æ³ķ ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġget Usage (): ĠString Ġ{ ĊĠĠĠ Ġval Ġformats Ġ= ĠString Array ( 1 , Ġ 1 0 , Ġtrue ) ĊĠĠĠ Ġvar Ġcounter Ġ= Ġ 1 ĊĠĠĠ Ġfor Ġ(( key : ĠString , Ġoption : ĠOption <* >) Ġin Ġoptions ) ĊĠĠĠĠĠ Ġif Ġ( key . startsWith ("-- ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġformat : ĠString Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( option . short Form Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( option . with Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"{ -- " Ġ+ Ġoption . long Form Ġ+ Ġ" =< value ${ counter ++ }> }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ"{ -- " Ġ+ Ġoption . long Form Ġ+ Ġ" }" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( option . with Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"{ -- " Ġ+ Ġoption . long Form Ġ+ Ġ" =< value $ counter >, Ġ- " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoption . short Form Ġ+ Ġ" Ġvalue ${ counter ++ }}" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ"{ -- " Ġ+ Ġoption . long Form Ġ+ Ġ", Ġ- " Ġ+ Ġoption . short Form Ġ+ Ġ" }" ĊĊĠĠĠĠĠĠĠ Ġ// Ġ" []" è¡¨ç¤º åı¯ éĢī åıĤæķ° ĊĠĠĠĠĠĠĠ Ġif Ġ(! option . isRequired ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġformat Ġ= Ġ" [$ format ]" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġformats . add ( format ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġ" Usage : Ġ${ this . name } Ġ" Ġ+ ĊĠĠĠĠĠĠĠ Ġif Ġ( formats . size Ġ> Ġ 0 ) Ġformats . join (" Ġ") Ġelse Ġ"" ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠgetDescription (): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġ" Description : Ġ${ this . desc }" ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġget Options Description (): ĠString Ġ= ĊĠĠĠĠĠ Ġif Ġ( help . size Ġ> Ġ 0 ) Ġ" Options :" Ġ+ Ġ"\ n \ t " Ġ+ ĊĠĠĠĠĠĠĠĠĠ Ġhelp . join ("\ n \ t ") Ġelse Ġ"" ĊĊĠ Ġopen Ġfun Ġget Help (): ĠString Ġ= Ġget Usage () Ġ+ Ġ"\ n " Ġ+ ĊĠĠĠĠĠ ĠgetDescription () Ġ+ Ġ"\ n " Ġ+ Ġget Options Description () ĊĊĠ Ġprivate Ġfun ĠString Array . join ( separator : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġvar Ġresult Ġ= Ġ"" ĊĠĠĠ Ġval Ġsize Ġ= Ġthis . size ĊĠĠĠ Ġif Ġ( size Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠ Ġresult Ġ+= Ġthis . get ( 0 ) ĊĠĠĠĠĠ Ġif Ġ( size Ġ> Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 1 .. ( size Ġ- Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠ Ġresult Ġ+= Ġseparator Ġ+ Ġthis . get ( index ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult ĊĠ Ġ} Ċ }