package Ġorg . sk ellig . feature . parser Ċ Ċ import Ġorg . sk ellig . feature . Tag Details Ċ import Ġorg . sk ellig . feature . Test Pre Re quis ites Ċ import Ġjava . util . regex . Pattern Ċ Ċ class ĠTag Details Extractor Ġ: ĠTest Pre Re quis ites Extractor < Tag Details > Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG S _ PATTERN Ġ= ĠPattern . compile ("@ ([ \\ w -_ ]+ )") ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠSPECIAL _ TAGS _ IGNORE _ FILTER Ġ= Ġset Of (" Init ", Ġ" Data ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġextract From ( text : ĠString ?): ĠTest Pre Re quis ites < Tag Details >? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtext ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtags Ġ= Ġmutable Set Of < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmatcher Ġ= ĠTAG S _ PATTERN . matcher ( text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( matcher . find ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġmatcher . group ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! SPECIAL _ TAGS _ IGNORE _ FILTER . contains ( tag )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags . add ( tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tags . isEmpty ()) Ġnull Ġelse ĠTag Details ( tags ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }