package Ġcom . github . the apache 6 4 . prime sc ream s Ċ Ċ import Ġcom . github . the apache 6 4 . prime sc ream s . model . Rules Item Ċ import Ġcom . intellij . notification . Notification Ċ import Ġcom . intellij . notification . Notification Listener Ċ import Ġcom . intellij . notification . Notification Type Ċ import Ġcom . intellij . notification . Notifications Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . application . Modal ity State Ċ import Ġcom . intellij . openapi . editor . event . Document Event Ċ import Ġcom . intellij . openapi . editor . event . Document Listener Ċ import Ġcom . intellij . openapi . file Editor . File Document Manager Ċ import Ġcom . intellij . openapi . util . Text Range Ċ import Ġkotlinx . serialization . decode FromString Ċ import Ġkotlinx . serialization . json . Json Ċ import Ġjava . io . Buffered InputStream Ċ import Ġjavax . sound . sampled . Audio InputStream Ċ import Ġjavax . sound . sampled . Audio System Ċ Ċ private Ġval Ġrules : ĠList < Rules Item > Ġby Ġlazy Ġ{ ĊĠĠĠ ĠJson . decode FromString ( Prime Sc ream s Listener :: class . java . getResource ("/ rules . json "). read Text (). also Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Content : Ġ$ it ") ĊĠĠĠ Ġ}) Ċ } Ċ Ċ fun Ġinvoke Later On ED T ( block : Ġ() Ġ-> ĠUnit ) Ġ= ĊĠĠĠ ĠApplication Manager . getApplication (). invoke And Wait ( block , ĠMod ality State . NON _ MOD AL ) Ċ Ċ fun Ġshow ( ĊĠĠĠ Ġmessage : ĠString , ĊĠĠĠ Ġtitle : ĠString Ġ= Ġ"", ĊĠĠĠ Ġnotification Type : ĠNotification Type Ġ= ĠNotification Type . INFORMATION , ĊĠĠĠ Ġgroup Display Id : ĠString Ġ= Ġ"", ĊĠĠĠ Ġnotification Listener : ĠNotification Listener ? Ġ= Ġnull Ċ ) Ġ{ ĊĠĠĠ Ġinvoke Later On ED T Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnotification Ġ= ĠNotification ( group Display Id , Ġtitle , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthis Ġis Ġbecause ĠNotification Ġdoesn 't Ġaccept Ġempty Ġmessages ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . take Unless Ġ{ Ġit . isBlank () Ġ} Ġ?: Ġ"[ Ġempty Ġ] ", Ġnotification Type , Ġnotification Listener ) ĊĠĠĠĠĠĠĠ ĠApplication Manager . getApplication (). message Bus . sync Publisher ( Notifications . TOPIC ). notify ( notification ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠPrime Sc ream s Listener Ġ: ĠDocument Listener Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġdocument Changed ( event : ĠDocument Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . document Changed ( event ) ĊĠĠĠĠĠĠĠ Ġif Ġ( event . is Whole Text Re placed ) Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile Document Manager . getInstance (). getFile ( event . document ) ĊĠĠĠĠĠĠĠ Ġval Ġrule Ġ= Ġrules . find Ġ{ Ġit . extensions . contains ( file ?. extension ) Ġ} Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġwords Ġ= Ġevent . get Word Set (). also Ġ{ Ġprintln (" Words : Ġ$ it ") Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmatching Rule Ġ= Ġrule . rules . find Ġ{ Ġx Ġ-> Ġx . words . any Ġ{ Ġy Ġ-> Ġwords . contains ( y ) Ġ} Ġ} Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġprintln (" Matching Ġrule : Ġ${ matching Rule . audio }") ĊĠĠĠĠĠĠĠ Ġplay Sound ( matching Rule . audio ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠDocument Event . get Word Set (): ĠSet < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġwords Ġ= Ġmutable Set Of < String >() ĊĠĠĠĠĠĠĠ Ġvar Ġx Ġ= Ġoffset ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ< Ġ 0 ) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġword Ġ= Ġdocument . getText ( Text Range ( x , Ġoffset Ġ+ Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( word . isBlank () Ġ|| Ġword . contains ("\ n ") Ġ|| Ġword . trim (). contains (" Ġ")) Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwords . add ( word . trim ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġx -- ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġwords ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Synchron ized ĊĠĠĠ Ġfun Ġplay Sound ( url : ĠString ) Ġ= ĠThread Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclip Ġ= ĠAudio System . get Clip () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresource Stream Ġ= Ġjava Class . getResource AsStream ("/ sounds /$ url ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresource Stream ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffered InputStream Ġ= ĠBuffered InputStream ( resource Stream ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠinputStream : ĠAudio InputStream Ġ= ĠAudio System . get Audio InputStream ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuffered InputStream ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip . open ( inputStream ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclip . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow ( e . message . toString (), Ġnotification Type Ġ= ĠNotification Type . ERROR ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. start () Ċ } ĊĊĊĊ