/** Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 ĠDr . ĠDavid ĠH . ĠA keh ur st Ġ( http :// dr . david . h . ake hur st . net ) Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġnet . ake hur st . language . ag l . runtime . structure Ċ Ċ internal Ġclass ĠRuntime Rule Ext ender ( val Ġr rs b : ĠRuntime Rule Set Builder , Ġval Ġrule : ĠRuntime Rule ) Ġ{ ĊĊĠĠĠ Ġfun Ġchoice ( choice Kind : ĠRuntime Rule Choice Kind , Ġvar arg Ġitems : ĠRuntime Rule ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrule . rhs Opt Ġ= ĠRuntime Rule Item ( Runtime Rule R hs Items Kind . CHO ICE , Ġchoice Kind , Runtime Rule List Kind . NONE ,- 1 , Ġ 0 , Ġitems ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġconcat enation ( var arg Ġitems : ĠRuntime Rule ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrule . rhs Opt Ġ= ĠRuntime Rule Item ( Runtime Rule R hs Items Kind . CONCAT EN ATION , ĠRuntime Rule Choice Kind . NONE , Runtime Rule List Kind . NONE ,- 1 , Ġ 0 , Ġitems ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġmulti ( min : ĠInt , Ġmax : ĠInt , Ġitem : ĠRuntime Rule ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġif Ġ( 0 == min ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= ĠRuntime Rule Terminal Builder ( this . rr sb ). empty ( this . rule ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( item , Ġe ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . rhs Opt Ġ= ĠRuntime Rule Item ( Runtime Rule R hs Items Kind . LIST , ĠRuntime Rule Choice Kind . NONE , Runtime Rule List Kind . MULTI , min , Ġmax , Ġitems ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġs List ( min : ĠInt , Ġmax : ĠInt , Ġseparator : ĠRuntime Rule , Ġitem : ĠRuntime Rule ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġif Ġ( 0 == min ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= ĠRuntime Rule Terminal Builder ( this . rr sb ). empty ( this . rule ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( item , Ġseparator , Ġe ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( item , separator ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . rhs Opt Ġ= ĠRuntime Rule Item ( Runtime Rule R hs Items Kind . LIST , Runtime Rule Choice Kind . NONE , ĠRuntime Rule List Kind . SEPAR ATED _ LIST , min , Ġmax , Ġitems ) ĊĠĠĠ Ġ} Ċ }