package Ġn in ck b lok je . ks heet Ċ Ċ import Ġkotlinx . c interop .* Ċ import Ġkotlinx . cli .* Ċ import Ġn in ck b lok je . ks heet . Build Kon fig . ks heet Revision Ċ import Ġn in ck b lok je . ks heet . Build Kon fig . ks heet Version Ċ import Ġplatform . posix .* Ċ Ċ class ĠArg Parser And Args And Opts Ġ( ĊĠĠĠ Ġval Ġparser : ĠArg Parser , ĊĠĠĠ Ġval Ġk sheet Opt : ĠSingle Option < String , ĠDefault Required Type . Default >, ĊĠĠĠ Ġval Ġlist Opt : ĠSingle Option < Boolean , ĠDefault Required Type . Default >, ĊĠĠĠ Ġval Ġquiet Opt : ĠSingle Option < Boolean , ĠDefault Required Type . Default >, ĊĠĠĠ Ġval Ġversion Opt : ĠSingle Option < Boolean , ĠDefault Required Type . Default >, ĊĠĠĠ Ġval Ġsubject Arg : ĠSingle Nullable Argument < String >, ĊĠĠĠ Ġval Ġsection Arg : ĠSingle Nullable Argument < String > Ċ ) Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġparser And All Ġ= Ġget Arg Parser () ĊĠĠĠ Ġparser And All . parser . parse ( args ) ĊĊĠĠĠ Ġval Ġk sheet File Ġ= Ġopen K Sheet File ( parser And All . ks heet Opt . value ) ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent : ĠList < String >? Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparser And All . version Opt . value Ġ-> Ġget Version () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk sheet File Ġ== Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġperror (" Unable Ġto Ġopen Ġ${ parser And All . ks heet Opt . value }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparser And All . list Opt . value Ġ-> Ġfind Entries ( ks heet File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparser And All . subject Arg . value Ġ!= Ġnull Ġ&& Ġparser And All . section Arg . value Ġ!= Ġnull Ġ-> Ġfind Entry ( ks heet File , Ġparser And All . subject Arg . value !! , Ġparser And All . section Arg . value !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( content Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Arg Parser (). parser . parse ( array Of (" help ")) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ(! parser And All . quiet Opt . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint Content ( content ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġfinally Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( ks heet File Ġ!= Ġnull ) Ġfclose ( ks heet File ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġopen K Sheet File ( ks heet FilePath : ĠString ): ĠC Pointer < FILE >? Ġ{ ĊĠĠĠ Ġreturn Ġwhen ( val Ġk sheet File Ġ= Ġfopen ( ks heet FilePath , Ġ" r ")) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull Ġ-> Ġfopen ( ks heet FilePath , Ġ" a +") ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġk sheet File ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġfind Entries ( ks heet File : ĠC Pointer < FILE >): ĠList < String > Ġ{ ĊĠĠĠ Ġval Ġcontent Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠ Ġmem Scoped Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsubject : ĠString ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġbuffer Length Ġ= Ġ 6 4 Ġ* Ġ 1 0 2 4 ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġalloc Array < Byte Var >( buffer Length ) ĊĊĠĠĠĠĠĠĠ Ġwhile ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġf gets ( buffer , Ġbuffer Length , Ġk sheet File )?. to K String ()?. trim () Ġ?: Ġbreak ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line . startsWith (" ## Ġ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject Ġ= Ġline . replace First (" ## Ġ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( subject Ġ!= Ġnull Ġ&& Ġline . startsWith (" ### Ġ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent . add ("$ subject Ġ${ line . replace First (" ### Ġ", Ġ"") }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġcontent Ċ } Ċ Ċ fun Ġfind Entry ( ks heet File : ĠC Pointer < FILE >, Ġsubject : ĠString , Ġsection : ĠString ): ĠList < String > Ġ{ ĊĠĠĠ Ġval Ġcontent Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠ Ġmem Scoped Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsubject Found Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġsection Found Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġvar Ġcontent Found Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġbuffer Length Ġ= Ġ 6 4 Ġ* Ġ 1 0 2 4 ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġalloc Array < Byte Var >( buffer Length ) ĊĊĠĠĠĠĠĠĠ Ġwhile ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline Ġ= Ġf gets ( buffer , Ġbuffer Length , Ġk sheet File )?. to K String ()?. trim () Ġ?: Ġbreak ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( content Found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line Ġ== Ġ" ```` ") Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġcontent . add ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( section Found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line . startsWith (" ```` ")) Ġcontent Found Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( subject Found ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line Ġ== Ġ" ### Ġ$ section ") Ġsection Found Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line Ġ== Ġ" ## Ġ$ subject ") Ġsubject Found Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġcontent Ċ } Ċ Ċ fun Ġget Arg Parser (): ĠArg Parser And Args And Opts Ġ{ ĊĠĠĠ Ġval Ġparser Ġ= ĠArg Parser (" ks heet ") ĊĠĠĠ Ġreturn ĠArg Parser And Args And Opts ( ĊĠĠĠĠĠĠĠ Ġparser , ĊĠĠĠĠĠĠĠ Ġparser . option ( Arg Type . String , Ġshort Name Ġ= Ġ" f ", ĠfullName Ġ= Ġ" file ", Ġdescription Ġ= Ġ" Che at Ġsheet ĠM ardown Ġfile "). default ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetDefault K Sheet File ()), ĊĠĠĠĠĠĠĠ Ġparser . option ( Arg Type . Boolean , Ġshort Name Ġ= Ġ" l ", ĠfullName Ġ= Ġ" list ", Ġdescription Ġ= Ġ" Show Ġall Ġpossible Ġentries "). default ( false ), ĊĠĠĠĠĠĠĠ Ġparser . option ( Arg Type . Boolean , Ġshort Name Ġ= Ġ" q ", ĠfullName Ġ= Ġ" quiet ", Ġdescription Ġ= Ġ" No Ġoutput "). default ( false ), ĊĠĠĠĠĠĠĠ Ġparser . option ( Arg Type . Boolean , Ġshort Name Ġ= Ġ" v ", ĠfullName Ġ= Ġ" version ", Ġdescription Ġ= Ġ" Display Ġversion "). default ( false ), ĊĠĠĠĠĠĠĠ Ġparser . argument ( Arg Type . String , ĠfullName Ġ= Ġ" subject ", Ġdescription Ġ= Ġ" Subject Ġ( heading Ġ 2 ) Ġto Ġreturn "). optional (), ĊĠĠĠĠĠĠĠ Ġparser . argument ( Arg Type . String , ĠfullName Ġ= Ġ" section ", Ġdescription Ġ= Ġ" Section Ġ( heading Ġ 3 ) Ġto Ġreturn "). optional () ĊĠĠĠ Ġ) Ċ } Ċ Ċ fun ĠgetDefault K Sheet File (): String Ġ{ ĊĠĠĠ Ġreturn Ġwhen Ġ( Platform . os Family ) Ġ{ ĊĠĠĠĠĠĠĠ ĠOs Family . WINDOWS Ġ-> Ġ"${ getenv (" USER PROFILE ") ?. to K String ()} \\ cs heet . md " ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"${ getenv (" HOME ") ?. to K String () }/ cs heet . md " ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġget Version (): ĠList < String > Ġ{ ĊĠĠĠ Ġreturn ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġ" ks heet Ġversion Ġ$ ks heet Version , Ġrevision Ġ$ ks heet Revision ", ĊĠĠĠĠĠĠĠ Ġ" See : Ġhttps :// github . com / nin ck b lok je / ks heet " ĊĠĠĠ Ġ) Ċ } Ċ Ċ fun Ġprint Content ( content : ĠList < String >) Ġ{ ĊĠĠĠ Ġcontent . forEach Ġ{ Ġs Ġ-> Ġprintln ( s ) Ġ} Ċ }