package Ġco . eft . xml ĊĊ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ Ġval Ġre Ġ= ĠRegex ("[ ^ \\ p { L }\\ d \\ s ., âĢĺ âĢĻ () /- ]") ĊĊĠĠĠ Ġval Ġdoc Ġ= ĠDoc Builder (). build (" contributors / contributors . xml ") ĊĊĠĠĠ Ġdoc . all Text Nodes That Ġ{ Ġre . contains Match In ( it ) Ġ} ĊĠĠĠĠĠĠ Ġ. forEach Indexed Ġ{ Ġi , Ġnode Ġ-> Ġprintln ("$ i : Ġ$ node ") Ġ} ĊĊĠĠĠ Ġvar Ġline Ġ= Ġ 0 ĊĠĠĠ Ġdoc . nodes () ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ! is ĠNode . Text Ġ|| Ġit . value Ġ!= Ġ"" Ġ} ĊĠĠĠĠĠĠĠ Ġ. forEach Ġ{ Ġprintln ("${ ++ line }: Ġ$ it ") Ġ} ĊĊĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠ Ġdoc . elements () ĊĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . name Ġ== Ġ" person " Ġ} ĊĠĠĠĠĠĠ Ġ. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġit [" xml : id "] ĊĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġit /" label " /' #' ĊĠĠĠĠĠĠĠĠĠĠ Ġprintln (""" person [ ${ i ++ } ]: Ġid =$ id , Ġname ='$ name """) ĊĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ ĠNode . all Text Nodes That ( predicate : Ġ( String ) Ġ-> ĠBoolean ): ĠList < Node . Text > Ġ= ĊĠĠĠ Ġall Text Nodes That ( predicate , Ġmutable ListOf ()) Ċ Ċ fun Ġ ĠNode . all Text Nodes That ( predicate : Ġ( String ) Ġ-> ĠBoolean , Ġresult : ĠMutable List < Node . Text >): ĠList < Node . Text > Ġ{ ĊĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠNode . Text -> Ġif Ġ( predicate ( value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠNode . Doc Ġ-> Ġdoc Element . all Text Nodes That ( predicate , Ġresult ) ĊĊĠĠĠĠĠĠĠ Ġis ĠNode . Elem -> Ġall Children (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Ġ-> Ġchild . all Text Nodes That ( predicate , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow Ġthrow ĠIllegalArgumentException (" Unexpected Ġargument Ġtype : Ġ${ this :: class }") ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult Ċ } ĊĊ Ċ fun Ġ ĠNode . forEach Node ( consume : Ġ( Node ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġif Ġ( this Ġis ĠNode . Doc ) ĊĠĠĠĠĠĠĠ Ġdoc Element . forEach Node ( consume ) ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġconsume ( this ) ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġis ĠNode . Elem ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġat tribs . values . forEach Ġ{ Ġit . forEach Node ( consume ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . forEach Ġ{ Ġit . forEach Node ( consume ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ ĠNode . forEach Elem ( consume : Ġ( Node . Elem ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġif Ġ( this Ġis ĠNode . Doc ) ĊĠĠĠĠĠĠĠ Ġdoc Element . forEach Elem ( consume ) ĊĠĠĠ Ġelse Ġif Ġ( this Ġis ĠNode . Elem ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconsume ( this ) ĊĠĠĠĠĠĠĠ Ġchildren . forEach Ġ{ Ġit . forEach Elem ( consume ) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ ĠNode . elements (): ĠSequence < Node . Elem > Ġ= Ġsequence < Node . Elem > Ġ{ ĊĠĠĠ Ġif Ġ( this @ elements Ġis ĠNode . Doc ) ĊĠĠĠĠĠĠĠ Ġyield All ( doc Element . elements ()) ĊĠĠĠ Ġelse Ġif Ġ( this @ elements Ġis ĠNode . Elem ) Ġ{ ĊĠĠĠĠĠĠĠ Ġyield ( this @ elements ) ĊĠĠĠĠĠĠĠ Ġyield All ( elements Children (). flatMap ( Node :: elements )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġ ĠNode . nodes ( Attr : ĠBoolean = true , ĠText : ĠBoolean = true ): ĠSequence < Node > Ġ= Ġsequence Ġ{ ĊĠĠĠ Ġwhen Ġ( this @ nodes ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠNode . Doc Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyield All ( doc Element . nodes ( Attr = Attr , ĠText = Text )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠNode . Elem Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyield ( this @ nodes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Attr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyield All ( attribs . values ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyield All ( all Children (). flatMap Ġ{ Ġit . nodes ( Attr = Attr , ĠText = Text ) Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠNode . Text Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyield ( this @ nodes ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( false ) Ġ{ Ġ" Unexpected Ġnode Ġtype : Ġ${ this @ nodes } "} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /* Ċ fun Ġ ĠNode . forEach ( consumer : ĠConsumer < Node >) Ġ{ ĊĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠNode . Doc Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdoc Element ?. forEach ( consumer ) ĊĊĠĠĠĠĠĠĠ Ġis ĠNode . Elem Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġat tribs . values . forEach Ġ{ Ġit . forEach ( consumer ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . forEach Ġ{ Ġit . forEach ( consumer ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ */