package Ġru . po cket byte . lo col aser . ini . resource . file Ċ Ċ import Ġru . po cket byte . lo col aser . config . Extra Params Ċ import Ġru . po cket byte . lo col aser . config . duplicate Comments Ċ import Ġru . po cket byte . lo col aser . resource . entity .* Ċ import Ġru . po cket byte . lo col aser . resource . file . Resource Stream File Ċ import Ġru . po cket byte . lo col aser . resource . formatting . Formatting Type Ċ import Ġru . po cket byte . lo col aser . resource . formatting . Java Formatting Type Ċ import Ġru . po cket byte . lo col aser . resource . formatting . No Formatting Type Ċ import Ġru . po cket byte . lo col aser . utils . Pl ural Utils Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . io . LineNumber Reader Ċ import Ġjava . nio . charset . StandardCharsets Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Paths Ċ import Ġjava . util . regex . Pattern Ċ Ċ class ĠIn i Resource File ( file : File , Ġprivate Ġval Ġm Locales : Set < String >? ): Resource Stream File ( file ) Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar ĠGENERATED _ COMMENT Ġ= Ġ"# ĠAUTO - GENERATED ĠFILE . ĠDO ĠNOT ĠMODIFY .\ r \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"# \ r \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"# ĠThis Ġfile Ġwas Ġautomatically Ġgenerated Ġby Ġthe ĠLo co L aser Ġtool .\ r \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"# ĠIt Ġshould Ġnot Ġbe Ġmodified Ġby Ġhand .\ r \ n \ r \ n " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOMMENT _ SINGLE _ LINE Ġ= Ġ"#" ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠLOCAL E _ PATTERN Ġ= Ġ"^ \\ s * \\ [( . +) \\ ]\\ s * $" ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠKEY _ VALUE _ PATTERN Ġ= Ġ" (( ?: [^ \"] | \\\\ \") +) Ġ= Ġ(( ?: [^ \"] | \\\\ \") *) " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPL UR AL _ KEY _ PATTERN Ġ= Ġ" (( ?: [^ \"] | \\\\ \") +) Ġ= Ġ\\ { \\ [ Ġplural \\ ( n \\ ) Ġ\\ ]\\ }" ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPL UR AL _ VALUE _ PATTERN Ġ= Ġ" (( ?: [^ \"] | \\\\ \") +) \\ [ ([ a - z ]*) \\ ]\\ s *= Ġ(( ?: [^ \"] | \\\\ \") *) " ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġto Platform Value ( string : String ): String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstring ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace (" \"", Ġ"\\ \" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("\ n ", Ġ"\\ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinternal Ġfun Ġfrom Platform Value ( string : String ): String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstring ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("\\ \"", Ġ"\" ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. replace ("\\ n ", Ġ"\ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġformatting Type : ĠFormat ting Type Ġ= ĠJava Formatting Type ĊĊĠĠĠ Ġoverride Ġfun Ġread ( extra Params : ĠExtra Params ?): Res Map ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( file . exists ()) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Map Ġ= ĠRes Map () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocale Matcher Ġ= ĠPattern . compile ( LOCAL E _ PATTERN ). matcher ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplural Key Matcher Ġ= ĠPattern . compile ( PL UR AL _ KEY _ PATTERN ). matcher ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplural Value Matcher Ġ= ĠPattern . compile ( PL UR AL _ VALUE _ PATTERN ). matcher ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Value Matcher Ġ= ĠPattern . compile ( KEY _ VALUE _ PATTERN ). matcher ("") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPaths . get ( file . to URI ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . new BufferedReader ( path , ĠStandard Charsets . UTF _ 8 ). use Ġ{ Ġreader -> ĠLine Number Reader ( reader ). use Ġ{ Ġline Reader -> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurrent Locale : String ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurrent Locale Map : Res Locale ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġline : String ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġplural Item : Res Item ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcomment : StringBuilder ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline Ġ= Ġline Reader . readLine () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocale Matcher . reset ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( locale Matcher . find () Ġ&& Ġlocale Matcher . group Count () Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Locale Ġ= Ġlocale Matcher . group ( 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Locales ?. contains ( current Locale ) Ġ!= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Locale Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Locale Map Ġ= Ġres Map . get ( current Locale ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Locale Map Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Locale Map Ġ= ĠRes Locale () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres Map . put ( current Locale , Ġcurrent Locale Map ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNo Ġlocale Ġfound . ĠKeep Ġlooking Ġfor Ġlocale Ġsection ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Locale Ġ== Ġnull Ġ|| Ġcurrent Locale Map Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line Ġ!= Ġnull Ġ&& Ġline . startsWith ( COMMENT _ SINGLE _ LINE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment String Ġ= Ġline . substring ( COMMENT _ SINGLE _ LINE . length ). trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( comment Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Ġ= ĠStringBuilder ( comment String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment . append ("\ n "). append ( comment String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( plural Item Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplural Value Matcher . reset ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( plural Value Matcher . find () Ġ&& Ġplural Value Matcher . group Count () Ġ== Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġplural Value Matcher . group ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquantity Ġ= ĠPl ural Utils . quantity FromString ( plural Value Matcher . group ( 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġplural Value Matcher . group ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Ġ== Ġplural Item . key Ġ&& Ġquantity Ġ!= Ġnull Ġ&& Ġvalue Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment String Ġ= Ġcomment ?. toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplural Item . add Value ( value , Ġcomment String , Ġquantity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( plural Item . values . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Locale Map . put ( plural Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplural Item Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplural Key Matcher . reset ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( plural Key Matcher . find () Ġ&& Ġplural Key Matcher . group Count () Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplural Item Ġ= ĠRes Item ( plural Key Matcher . group ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Value Matcher . reset ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( key Value Matcher . find () Ġ&& Ġkey Value Matcher . group Count () Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomment String Ġ= Ġcomment ?. toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= ĠRes Item ( key Value Matcher . group ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . add Value ( key Value Matcher . group ( 2 ), Ġcomment String , ĠQuantity . OTHER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Locale Map . put ( item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNothing Ġfound ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( line Ġ!= Ġnull ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcatch Ġ( e : IOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo Ġnothing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġres Map ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġoverride Ġfun Ġwrite ( res Map : Res Map , Ġextra Params : ĠExtra Params ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġopen () ĊĊĠĠĠĠĠĠĠ Ġwrite String Ln ( GENERATED _ COMMENT ) ĊĠĠĠĠĠĠĠ Ġwrit eln () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( locale Ġin Ġm Locales Ġ?: Ġreturn ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite String ("[ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite String ( locale ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwrite String Ln (" ]") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġres Map . get ( locale ) Ġ?: Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( key Ġin Ġitems . keys ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Item Ġ= Ġitems [ key ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( res Item Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( res Item . is Has Quant ities ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite String ( res Item . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite String Ln (" Ġ= Ġ{[ Ġplural ( n ) Ġ] }") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( value Ġin Ġres Item . values ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Comment ShouldBe Written ( value , Ġextra Params )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite String ( COMMENT _ SINGLE _ LINE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite String (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite String Ln ( value . comment !!. replace ("\ n ", Ġ"\ n $ COMMENT _ SINGLE _ LINE Ġ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite String ( res Item . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite String ("[ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite String ( value . quantity . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite String (" ] Ġ= Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite String Ln ( to Platform Value ( value . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġres Item . value For Quantity ( Quantity . OTHER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Comment ShouldBe Written ( value , Ġextra Params )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite String ( COMMENT _ SINGLE _ LINE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite String (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite String Ln ( value . comment !!. replace ("\ n ", Ġ"\ n $ COMMENT _ SINGLE _ LINE Ġ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite String ( res Item . key ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite String (" Ġ= Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite String Ln ( to Platform Value ( value . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġclose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Comment ShouldBe Written ( value : Res Value , Ġextra Params : ĠExtra Params ?): Boolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue . comment Ġ!= Ġnull Ġ&& Ġ( extra Params ?. duplicate Comments Ġ!= Ġfalse Ġ|| Ġvalue . comment Ġ!= Ġvalue . value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠRes Item . add Value ( value : ĠString , Ġcomment : ĠString ?, Ġquantity : ĠQuantity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġformatting Arguments Ġ= Ġformatting Type . arguments From Value ( value ) ĊĠĠĠĠĠĠĠ Ġval Ġformatting Type Ġ= Ġif Ġ( formatting Arguments ?. isEmpty () Ġ!= Ġfalse ) ĠNo Formatting Type Ġelse Ġformatting Type ĊĠĠĠĠĠĠĠ Ġthis . add Value ( Res Value ( value , Ġcomment , Ġquantity , Ġformatting Type , Ġformatting Arguments )) ĊĠĠĠ Ġ} Ċ } Ċ