package Ġcom . om god se . not ally . view models Ċ Ċ import Ġandroid . graphics . Type face Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . style . Stri ke through Span Ċ import Ġandroid . text . style . Style Span Ċ import Ġandroid . text . style . Type face Span Ċ import Ġcom . om god se . not ally . mis cellaneous . Span Representation Ċ import Ġcom . om god se . not ally . mis cellaneous . apply Spans Ċ import Ġcom . om god se . not ally . xml . XML Reader Ċ import Ġcom . om god se . not ally . xml . XML Tags Ċ import Ġcom . om god se . not ally . xml . XML Writer Ċ import Ġjava . io . FileWriter Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . HashSet Ċ Ċ class ĠTake Note Model Ġ: ĠBase Model () Ġ{ ĊĊĠĠĠ Ġvar Ġbody Ġ= ĠEdit able . Factory . getInstance (). new Editable ( String ()) ĊĊĠĠĠ Ġoverride Ġfun Ġsave Note () Ġ: ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( title . isBlank () Ġ&& Ġbody . isBlank ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġif Ġ( file Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Writer Ġ= ĠFile Writer ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġxml Writer Ġ= ĠXML Writer ( XML Tags . Note ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġxml Writer . start Note () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġxml Writer . setDate Created ( timestamp . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġxml Writer . setTitle ( title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġxml Writer . set Body ( body . toString (). trim End ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġxml Writer . set Spans ( get Filtered Spans ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġxml Writer . set Labels ( labels . value Ġ?: ĠHashSet ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġxml Writer . end Note () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Writer . write ( xml Writer . getText ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile Writer . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetState FromFile () Ġ{ ĊĠĠĠĠĠĠĠ Ġfile ?. let Ġ{ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file . exists ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġxml Reader Ġ= ĠXML Reader ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġxml Reader . getTitle () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġxml Reader . getDate Created (). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Ġ= Ġxml Reader . getBody (). apply Spans ( xml Reader . get Spans ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabels . value Ġ= Ġxml Reader . get Labels () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġget Filtered Spans (): ĠArrayList < Span Representation > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrepresentations Ġ= ĠLinked HashSet < Span Representation >() ĊĠĠĠĠĠĠĠ Ġval Ġspans Ġ= Ġbody . get Spans ( 0 , Ġbody . length , ĠObject :: class . java ) ĊĠĠĠĠĠĠĠ Ġspans . forEach Ġ{ Ġspan Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġbody . get Span End ( span ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġbody . get Span Start ( span ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrepresentation Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSpan Representation ( false , Ġfalse , Ġfalse , Ġfalse , Ġstart , Ġend ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( span Ġis ĠStyle Span ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( span . style Ġ== ĠType face . BOLD ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepresentation . is Bold Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( span . style Ġ== ĠType face . ITAL IC ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepresentation . is Italic Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( span Ġis ĠType face Span ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( span . family Ġ== Ġ" mono space ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepresentation . is Mono space Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( span Ġis ĠStri ke through Span ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepresentation . is Stri ke through Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( representation . isNot Use less ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepresentations . add ( representation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġget Filtered Represent ations ( ArrayList ( represent ations )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Filtered Represent ations ( represent ations : ĠArrayList < Span Representation >): ĠArrayList < Span Representation > Ġ{ ĊĠĠĠĠĠĠĠ Ġrepresentations . forEach Indexed Ġ{ Ġindex , Ġrepresentation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġrepresentations . find Ġ{ Ġspan Representation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspan Representation . isEqual In Size ( representation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match Ġ!= Ġnull Ġ&& Ġrepresentations . indexOf ( match ) Ġ!= Ġindex ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match . is Bold ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepresentation . is Bold Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match . is Italic ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepresentation . is Italic Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match . is Mono space ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepresentation . is Mono space Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( match . is Stri ke through ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrepresentation . is Stri ke through Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcopy Ġ= ĠArrayList ( represent ations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy [ index ] Ġ= Ġrepresentation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy . remove ( match ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Filtered Represent ations ( copy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġrepresentations ĊĠĠĠ Ġ} Ċ }