package Ġnl . h ann ah sten . tex ify idea . run . make index Ċ Ċ import Ġcom . intellij . execution . Runner And Configuration Settings Ċ import Ġcom . intellij . execution . impl . Run Configuration Before Run Provider Ċ import Ġcom . intellij . execution . impl . Run ManagerImpl Ċ import Ġcom . intellij . execution . process . Process Event Ċ import Ġcom . intellij . execution . process . Process Listener Ċ import Ġcom . intellij . execution . runners . Execution Environment Ċ import Ġcom . intellij . openapi . util . Key Ċ import Ġcom . intellij . openapi . util . io . File Util Ċ import Ġnl . h ann ah sten . tex ify idea . run . compiler . Make index Program Ċ import Ġnl . h ann ah sten . tex ify idea . run . latex . Lat ex Configuration Factory Ċ import Ġnl . h ann ah sten . tex ify idea . run . latex . Lat ex Run Configuration Ċ import Ġnl . h ann ah sten . tex ify idea . run . latex . getDefault Make index Programs Ċ import Ġnl . h ann ah sten . tex ify idea . run . latex . get Make index Options Ċ import Ġnl . h ann ah sten . tex ify idea . util . append Extension Ċ import Ġnl . h ann ah sten . tex ify idea . util . magic . File Magic Ċ import Ġjava . io . File Ċ import Ġjava . io . FileNotFoundException Ċ import Ġjava . io . IOException Ċ Ċ /** Ċ Ġ* ĠRun Ġmake index Ġand Ġthen Ġlat ex Ġagain Ġ( tw ice ). Ċ Ġ*/ Ċ class ĠRun Make index Listener ( ĊĠĠĠ Ġprivate Ġval Ġlat ex Run Config : ĠLat ex Run Configuration , ĊĠĠĠ Ġprivate Ġval Ġenvironment : ĠExecution Environment , ĊĠĠĠ Ġprivate Ġval Ġfiles To Clean Up : ĠMutable List < File > Ċ ) Ġ: ĠProcess Listener Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġprocess Terminated ( event : ĠProcess Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġcreate Ġnew Ġone Ġif Ġthere Ġis Ġnone Ġyet ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrun Config Settings List Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( latex Run Config . make index Run Configs . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenerate Index Configs () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlat ex Run Config . make index Run Configs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRun Ġall Ġrun Ġconfigurations ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( run Config Settings Ġin Ġrun Config Settings List ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmake index Run Config Ġ= Ġrun Config Settings . configuration Ġas ĠMake index Run Configuration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= Ġget Make index Options ( make index Run Config . main File , Ġmake index Run Config . project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase FileName Ġ= Ġoptions . get OrDefault (" name ", Ġmake index Run Config . main File ?. name Without Extension ) Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBecause Ġbib 2 gl s Ġneeds Ġthe Ġbib Ġfile , Ġand Ġwe Ġdo Ġnot Ġwant Ġto Ġguess Ġthe Ġlocation Ġof Ġthe Ġbib Ġfile ( s ) Ġto Ġcopy , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġchoose Ġto Ġcopy Ġthe Ġaux Ġfile Ġfirst Ġand Ġthen Ġrun Ġbib 2 gl s Ġnext Ġto Ġthe Ġmain Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIn Ġcomparison : Ġother Ġmake index Ġprograms Ġwe Ġrun Ġin Ġthe Ġaux il Ġdir Ġand Ġthen Ġcopy Ġthe Ġoutput Ġfiles Ġ( like Ġ. ind ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( make index Run Config . make index Program Ġ== ĠMake index Program . B IB 2 GL S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy Index Output Files ( base FileName , ĠFile Magic . bib 2 gl s Dependencies Extensions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRun Ġmake index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRun Configuration Before Run Provider . do Execute Task ( environment , Ġrun Config Settings , Ġnull ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy Index Output Files ( base FileName , ĠFile Magic . index File Extensions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy Bib 2 gl s Output ( make index Run Config , Ġbase FileName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġschedule Lat ex Runs () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlat ex Run Config . is Last Run Config Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlat ex Run Config . is First Run Config Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ. gl st ex Ġis Ġgenerated Ġby Ġbib 2 gl s , Ġwe Ġcould Ġclean Ġit Ġup Ġbut Ġcopy Ġto Ġoutput Ġfolder Ġinstead Ġjust Ġin Ġcase ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcopy Bib 2 gl s Output ( make index Run Config : ĠMake index Run Configuration , Ġbase FileName : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( make index Run Config . make index Program Ġ== ĠMake index Program . B IB 2 GL S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmain File Ġ= Ġlat ex Run Config . main File ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaux il Dir Ġ= Ġlat ex Run Config . get Aux il Directory () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( main File Ġ!= Ġnull Ġ&& Ġaux il Dir Ġ!= Ġnull Ġ&& Ġmain File . path Ġ!= Ġaux il Dir . path ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( extension Ġin Ġset Of (" gl st ex ", Ġ" gl g ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Util . rename ( File ( main File . parent . path Ġ+ Ġ'/' Ġ+ Ġbase FileName . append Extension ( extension )), ĠFile ( aux il Dir . path Ġ+ Ġ'/' Ġ+ Ġbase FileName . append Extension ( extension ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcatch Ġ( ignored : ĠIOException ) Ġ{} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġschedule Lat ex Runs () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠDon 't Ġschedule Ġmore Ġlat ex Ġruns Ġif Ġbib tex Ġis Ġused , Ġbecause Ġthat Ġwill Ġalready Ġschedule Ġthe Ġextra Ġruns ĊĠĠĠĠĠĠĠ Ġif Ġ( latex Run Config . bib Run Configs . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLaTeX Ġtwice ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlat ex Run Config . is First Run Config Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlat ex Settings Ġ= ĠRun ManagerImpl . getInstance Impl ( environment . project ). get Settings ( latex Run Config ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlat ex Run Config . is Last Run Config Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRun Configuration Before Run Provider . do Execute Task ( environment , Ġlat ex Settings , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlat ex Run Config . is Last Run Config Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRun Configuration Before Run Provider . do Execute Task ( environment , Ġlat ex Settings , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgenerate Index Configs (): ĠSet < Runner And Configuration Settings > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrun Manager Ġ= ĠRun ManagerImpl . getInstance Impl ( environment . project ) ĊĠĠĠĠĠĠĠ Ġval Ġindex Programs Ġ= ĠgetDefault Make index Programs ( latex Run Config . main File , Ġenvironment . project ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrun Configs Ġ= Ġmutable Set Of < Runner And Configuration Settings >() ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( index Program Ġin Ġindex Programs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmake index Run Config Settings Ġ= Ġrun Manager . create Configuration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLat ex Configuration Factory ( Make index Run Configuration Type ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrun Config Ġ= Ġmake index Run Config Settings . configuration Ġas ĠMake index Run Configuration ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Config . main File Ġ= Ġlat ex Run Config . main File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Config . make index Program Ġ= Ġindex Program ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Config . set Suggest ed Name () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbib 2 gl s Ġwe Ġhandle Ġseparately , Ġbecause Ġit Ġneeds Ġthe Ġbib Ġfile , Ġso Ġinstead Ġof Ġrunning Ġit Ġin Ġthe Ġaux il Ġdir Ġwe Ġrun Ġit Ġnext Ġto Ġthe Ġmain Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Config . working Directory Ġ= Ġif Ġ( run Config . make index Program Ġ!= ĠMake index Program . B IB 2 GL S ) Ġlat ex Run Config . get Aux il Directory () Ġelse Ġrun Config . main File ?. parent ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Manager . add Configuration ( make index Run Config Settings ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Configs . add ( make index Run Config Settings ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlat ex Run Config . make index Run Configs Ġ= Ġrun Configs ĊĠĠĠĠĠĠĠ Ġreturn Ġrun Configs ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCopy Ġ. ind Ġand Ġsimilar Ġfiles Ġfrom Ġwhere Ġthey Ġwere Ġgenerated Ġby Ġmake index Ġto Ġnext Ġto Ġthe Ġmain Ġfile , Ġso Ġan Ġindex Ġpackage Ġwill Ġhopefully Ġfind Ġit . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġbase FileName ĠFilename Ġof Ġgenerated Ġfiles Ġwithout Ġextension . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠList Ġof Ġfiles Ġthat Ġshould Ġbe Ġcleaned Ġup . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcopy Index Output Files ( base FileName : ĠString , Ġindex File Extensions : ĠSet < String >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġmain File Ġ= Ġlat ex Run Config . main File Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġaux il Dir Ġ= Ġlat ex Run Config . get Aux il Directory () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġsource Dir Ġ= Ġaux il Dir . path Ġ+ Ġ'/' ĊĠĠĠĠĠĠĠ Ġval Ġdestination Dir Ġ= ĠFile ( main File . path ). parent Ġ+ Ġ'/' ĊĊĠĠĠĠĠĠĠ Ġif Ġ( source Dir Ġ== Ġdestination Dir ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġ// ĠJust Ġtry Ġall Ġextensions Ġfor Ġfiles Ġthat Ġneed Ġto Ġbe Ġcopied ĊĠĠĠĠĠĠĠ Ġ// ĠSk ips Ġfiles Ġthat Ġdo Ġnot Ġexist ĊĠĠĠĠĠĠĠ Ġfor Ġ( extension Ġin Ġindex File Extensions ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex FileName Ġ= Ġbase FileName . append Extension ( extension ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex File Source Ġ= ĠFile ( source Dir Ġ+ Ġindex FileName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! index File Source . isFile ) Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex File Destination Ġ= ĠFile ( destination Dir Ġ+ Ġindex FileName ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġclean Ġup Ġfile Ġif Ġnot Ġcopied Ġthere Ġby Ġuser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index File Source . exists () Ġ&& Ġ! index File Destination . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfiles To Clean Up . add ( index File Destination ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Util . copy ( index File Source , Ġindex File Destination ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcatch Ġ( ignored : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Text Available ( p 0 : ĠProcess Event , Ġp 1 : ĠKey <* >) Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġprocess Will Terminate ( p 0 : ĠProcess Event , Ġp 1 : ĠBoolean ) Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġstart Not ified ( p 0 : ĠProcess Event ) Ġ{} Ċ }